<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos web academy - Web-Zoneware</title>
	<atom:link href="https://webzoneware.com/tag/web-academy/feed/" rel="self" type="application/rss+xml" />
	<link>https://webzoneware.com/tag/web-academy/</link>
	<description>Mais do que apenas uma academia web.</description>
	<lastBuildDate>Thu, 22 Oct 2026 04:49:51 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://webzoneware.com/wp-content/uploads/icon-webzoneware-150x150.png</url>
	<title>Arquivos web academy - Web-Zoneware</title>
	<link>https://webzoneware.com/tag/web-academy/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Projeto Final: Design System e Dashboard — Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-css/projeto-pratico-design-system-dashboard-css3/</link>
					<comments>https://webzoneware.com/web-academy/curso-css/projeto-pratico-design-system-dashboard-css3/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 04:49:51 +0000</pubDate>
				<category><![CDATA[Curso de CSS e CSS3]]></category>
		<category><![CDATA[css grid dashboard]]></category>
		<category><![CDATA[dashboard css3]]></category>
		<category><![CDATA[design system css]]></category>
		<category><![CDATA[glassmorphism css]]></category>
		<category><![CDATA[projeto final css3]]></category>
		<category><![CDATA[web academy]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29481</guid>

					<description><![CDATA[<p>Parabéns por chegar ao grande marco da Web Academy! Ao longo de 50 lições estruturadas, você dominou desde a anatomia dos seletores básicos, a mecânica do Box Model e o alinhamento bidimensional com Flexbox e Grid, até recursos de ponta como variáveis semânticas, Glassmorphism, animações a 60 FPS, seletores relacionais :has() e Container Queries. Agora, [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/projeto-pratico-design-system-dashboard-css3/">Projeto Final: Design System e Dashboard — Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">
    Parabéns por chegar ao grande marco da <strong>Web Academy</strong>! Ao longo de 50 lições estruturadas, você dominou desde a anatomia dos seletores básicos, a mecânica do Box Model e o alinhamento bidimensional com Flexbox e Grid, até recursos de ponta como variáveis semânticas, Glassmorphism, animações a 60 FPS, seletores relacionais <code>:has()</code> e Container Queries. Agora, é o momento de consolidar todas essas competências em um projeto prático de nível sênior: a construção de um <strong>Design System com Tokens Semânticos</strong> e um <strong>Dashboard Analítico de Alta Fidelidade</strong> em CSS3 puro.
</p>
<div class="wzw-callout wzw-callout-info">
<div class="wzw-callout-icon">🎓</div>
<div>
        <strong>A Síntese do Engenheiro de CSS:</strong> Um desenvolvedor front-end de elite não copia e cola estilos de frameworks prontos às cegas. Ele compreende a cascata, projeta tokens escaláveis, constrói layouts responsivos resilientes e sabe exatamente como extrair a máxima performance da GPU. Este projeto final é o portfólio definitivo da sua maestria em CSS3.
    </div>
</div>
<h2>1. A Arquitetura do Nosso Design System em Camadas</h2>
<p>
    Para garantir que o Dashboard seja modular e extensível para qualquer tipo de aplicação corporativa, organizamos as folhas de estilo seguindo três princípios arquiteturais:
</p>
<ol>
<li><strong>Camada 1 — Design Tokens Globais:</strong> Cores primitivas, escalas tipográficas fluidas, espaçamentos padronizados e sombras definidos em CSS Variables no seletor <code>:root</code>.</li>
<li><strong>Camada 2 — Metodologia BEM Estruturada:</strong> Componentes desacoplados (<code>.dashboard</code>, <code>.stat-card</code>, <code>.data-table</code>, <code>.badge</code>) com especificidade plana imune a conflitos de cascata.</li>
<li><strong>Camada 3 — Layout Híbrido Grid + Flexbox:</strong> O esqueleto mestre estruturado com <code>grid-template-areas</code> e os elementos internos alinhados milimetricamente com Flexbox.</li>
</ol>
<h2>2. Anatomia dos Componentes do Dashboard</h2>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th>Componente</th>
<th>Técnica CSS3 Aplicada</th>
<th>Papel no Layout</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Sidebar de Navegação</strong></td>
<td>Flexbox Vertical + Glassmorphism (<code>backdrop-filter</code>)</td>
<td>Menu lateral compacto com links iluminados em hover e estado ativo.</td>
</tr>
<tr>
<td><strong>Painel Superior (Header)</strong></td>
<td>Flexbox Horizontal + <code>align-items: center</code></td>
<td>Busca em tempo real, status do sistema e perfil do usuário.</td>
</tr>
<tr>
<td><strong>Bento Grid de Estatísticas</strong></td>
<td><code>grid-template-columns: repeat(auto-fit, minmax(220px, 1fr))</code></td>
<td>Cards analíticos com indicadores de métricas, gradientes e sombras dinâmicas.</td>
</tr>
<tr>
<td><strong>Tabela Analítica Inteligente</strong></td>
<td>Seletor Relacional <code>:has()</code> + Transições Suaves</td>
<td>Linhas com realce sob hover e esmaecimento de itens secundários.</td>
</tr>
</tbody>
</table>
</div>
<h2>3. Código Completo do Projeto Final (Design System &#038; Dashboard)</h2>
<p>
    Copie a estrutura HTML e a folha de estilos CSS3 abaixo para testar o painel funcionando integralmente no Playground IDE:
</p>
<h3>Estrutura HTML do Dashboard</h3>
    <div class="wzw-ide-card" id="wzw-code-19704" data-lang="html">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML5</span>
                                <span class="wzw-ide-lines-count">83 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-19704', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-19704', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;app-layout&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">&lt;!-- Barra Lateral (Sidebar) --&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;aside</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;sidebar&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;sidebar__brand&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;brand-icon&quot;</span><span class="wzw-tk-tag">&gt;</span>⚡<span class="wzw-tk-tag">&lt;/span&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;brand-text&quot;</span><span class="wzw-tk-tag">&gt;</span>ZoneStudio<span class="wzw-tk-tag">&lt;/span&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;nav</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;sidebar__nav&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;nav-item nav-item--active&quot;</span><span class="wzw-tk-tag">&gt;</span><span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;nav-item__icon&quot;</span><span class="wzw-tk-tag">&gt;</span>📊<span class="wzw-tk-tag">&lt;/span&gt;</span> Visão Geral<span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;nav-item&quot;</span><span class="wzw-tk-tag">&gt;</span><span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;nav-item__icon&quot;</span><span class="wzw-tk-tag">&gt;</span>⚡<span class="wzw-tk-tag">&lt;/span&gt;</span> Ferramentas<span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;nav-item&quot;</span><span class="wzw-tk-tag">&gt;</span><span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;nav-item__icon&quot;</span><span class="wzw-tk-tag">&gt;</span>👥<span class="wzw-tk-tag">&lt;/span&gt;</span> Usuários<span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;nav-item&quot;</span><span class="wzw-tk-tag">&gt;</span><span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;nav-item__icon&quot;</span><span class="wzw-tk-tag">&gt;</span>⚙️<span class="wzw-tk-tag">&lt;/span&gt;</span> Ajustes<span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/nav&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/aside&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">&lt;!-- Área Principal de Conteúdo --&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;main</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;main-content&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;header</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;topbar&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;h2</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;topbar__title&quot;</span><span class="wzw-tk-tag">&gt;</span>Painel de Operações CSS3<span class="wzw-tk-tag">&lt;/h2&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;topbar__user&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;badge badge--online&quot;</span><span class="wzw-tk-tag">&gt;</span>Online<span class="wzw-tk-tag">&lt;/span&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;user-avatar&quot;</span><span class="wzw-tk-tag">&gt;</span>DEV<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/header&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">&lt;!-- Grid de Métricas Analíticas --&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;section</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metrics-grid&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card metric-card--glow-cyan&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card__subtitle&quot;</span><span class="wzw-tk-tag">&gt;</span>Requisições Otimizadas<span class="wzw-tk-tag">&lt;/span&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card__value&quot;</span><span class="wzw-tk-tag">&gt;</span>1.42M<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card__delta metric-card__delta--positive&quot;</span><span class="wzw-tk-tag">&gt;</span>↑ +24.8% este mês<span class="wzw-tk-tag">&lt;/span&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card metric-card--glow-green&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card__subtitle&quot;</span><span class="wzw-tk-tag">&gt;</span>Performance Web Vitals<span class="wzw-tk-tag">&lt;/span&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card__value&quot;</span><span class="wzw-tk-tag">&gt;</span>99/100<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card__delta metric-card__delta--positive&quot;</span><span class="wzw-tk-tag">&gt;</span>↑ LCP 0.6s estável<span class="wzw-tk-tag">&lt;/span&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card metric-card--glow-amber&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card__subtitle&quot;</span><span class="wzw-tk-tag">&gt;</span>Payload CSS Minificado<span class="wzw-tk-tag">&lt;/span&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card__value&quot;</span><span class="wzw-tk-tag">&gt;</span>12.4 KB<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;metric-card__delta metric-card__delta--positive&quot;</span><span class="wzw-tk-tag">&gt;</span>↓ -68% de compressão<span class="wzw-tk-tag">&lt;/span&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/section&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">&lt;!-- Tabela de Sessões com :has() e Glassmorphism --&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;section</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;table-container&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;h3</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;section-heading&quot;</span><span class="wzw-tk-tag">&gt;</span>Monitoramento de Componentes em Tempo Real<span class="wzw-tk-tag">&lt;/h3&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;table</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;data-table&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;thead&gt;</span></span>
<span class="wzw-code-line">          <span class="wzw-tk-tag">&lt;tr&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;th&gt;</span>Módulo<span class="wzw-tk-tag">&lt;/th&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;th&gt;</span>Tecnologia<span class="wzw-tk-tag">&lt;/th&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;th&gt;</span>Render Layer<span class="wzw-tk-tag">&lt;/th&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;th&gt;</span>Status<span class="wzw-tk-tag">&lt;/th&gt;</span></span>
<span class="wzw-code-line">          <span class="wzw-tk-tag">&lt;/tr&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/thead&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;tbody&gt;</span></span>
<span class="wzw-code-line">          <span class="wzw-tk-tag">&lt;tr&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span><span class="wzw-tk-tag">&lt;strong&gt;</span>Container Queries<span class="wzw-tk-tag">&lt;/strong&gt;</span><span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span>CSS Containment L3<span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span>Layout Inline<span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span><span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;status-pill status-pill--success&quot;</span><span class="wzw-tk-tag">&gt;</span>Ativo<span class="wzw-tk-tag">&lt;/span&gt;</span><span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">          <span class="wzw-tk-tag">&lt;/tr&gt;</span></span>
<span class="wzw-code-line">          <span class="wzw-tk-tag">&lt;tr&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span><span class="wzw-tk-tag">&lt;strong&gt;</span>Seletor Relacional<span class="wzw-tk-tag">&lt;/strong&gt;</span><span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span>CSS Selectors L4 (:has)<span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span>CSSOM Matching<span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span><span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;status-pill status-pill--success&quot;</span><span class="wzw-tk-tag">&gt;</span>Ativo<span class="wzw-tk-tag">&lt;/span&gt;</span><span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">          <span class="wzw-tk-tag">&lt;/tr&gt;</span></span>
<span class="wzw-code-line">          <span class="wzw-tk-tag">&lt;tr&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span><span class="wzw-tk-tag">&lt;strong&gt;</span>Glassmorphism Core<span class="wzw-tk-tag">&lt;/strong&gt;</span><span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span>Backdrop Filter &amp; Blur<span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span>GPU Accelerated<span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;td&gt;</span><span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;status-pill status-pill--warning&quot;</span><span class="wzw-tk-tag">&gt;</span>Calibrado<span class="wzw-tk-tag">&lt;/span&gt;</span><span class="wzw-tk-tag">&lt;/td&gt;</span></span>
<span class="wzw-code-line">          <span class="wzw-tk-tag">&lt;/tr&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/tbody&gt;</span></span>
<span class="wzw-code-line">      <span class="wzw-tk-tag">&lt;/table&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/section&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/main&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/div&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;div class=&quot;app-layout&quot;&gt;
  &lt;!-- Barra Lateral (Sidebar) --&gt;
  &lt;aside class=&quot;sidebar&quot;&gt;
    &lt;div class=&quot;sidebar__brand&quot;&gt;
      &lt;span class=&quot;brand-icon&quot;&gt;⚡&lt;/span&gt;
      &lt;span class=&quot;brand-text&quot;&gt;ZoneStudio&lt;/span&gt;
    &lt;/div&gt;

    &lt;nav class=&quot;sidebar__nav&quot;&gt;
      &lt;a href=&quot;#&quot; class=&quot;nav-item nav-item--active&quot;&gt;&lt;span class=&quot;nav-item__icon&quot;&gt;📊&lt;/span&gt; Visão Geral&lt;/a&gt;
      &lt;a href=&quot;#&quot; class=&quot;nav-item&quot;&gt;&lt;span class=&quot;nav-item__icon&quot;&gt;⚡&lt;/span&gt; Ferramentas&lt;/a&gt;
      &lt;a href=&quot;#&quot; class=&quot;nav-item&quot;&gt;&lt;span class=&quot;nav-item__icon&quot;&gt;👥&lt;/span&gt; Usuários&lt;/a&gt;
      &lt;a href=&quot;#&quot; class=&quot;nav-item&quot;&gt;&lt;span class=&quot;nav-item__icon&quot;&gt;⚙️&lt;/span&gt; Ajustes&lt;/a&gt;
    &lt;/nav&gt;
  &lt;/aside&gt;

  &lt;!-- Área Principal de Conteúdo --&gt;
  &lt;main class=&quot;main-content&quot;&gt;
    &lt;header class=&quot;topbar&quot;&gt;
      &lt;h2 class=&quot;topbar__title&quot;&gt;Painel de Operações CSS3&lt;/h2&gt;
      &lt;div class=&quot;topbar__user&quot;&gt;
        &lt;span class=&quot;badge badge--online&quot;&gt;Online&lt;/span&gt;
        &lt;div class=&quot;user-avatar&quot;&gt;DEV&lt;/div&gt;
      &lt;/div&gt;
    &lt;/header&gt;

    &lt;!-- Grid de Métricas Analíticas --&gt;
    &lt;section class=&quot;metrics-grid&quot;&gt;
      &lt;div class=&quot;metric-card metric-card--glow-cyan&quot;&gt;
        &lt;span class=&quot;metric-card__subtitle&quot;&gt;Requisições Otimizadas&lt;/span&gt;
        &lt;div class=&quot;metric-card__value&quot;&gt;1.42M&lt;/div&gt;
        &lt;span class=&quot;metric-card__delta metric-card__delta--positive&quot;&gt;↑ +24.8% este mês&lt;/span&gt;
      &lt;/div&gt;

      &lt;div class=&quot;metric-card metric-card--glow-green&quot;&gt;
        &lt;span class=&quot;metric-card__subtitle&quot;&gt;Performance Web Vitals&lt;/span&gt;
        &lt;div class=&quot;metric-card__value&quot;&gt;99/100&lt;/div&gt;
        &lt;span class=&quot;metric-card__delta metric-card__delta--positive&quot;&gt;↑ LCP 0.6s estável&lt;/span&gt;
      &lt;/div&gt;

      &lt;div class=&quot;metric-card metric-card--glow-amber&quot;&gt;
        &lt;span class=&quot;metric-card__subtitle&quot;&gt;Payload CSS Minificado&lt;/span&gt;
        &lt;div class=&quot;metric-card__value&quot;&gt;12.4 KB&lt;/div&gt;
        &lt;span class=&quot;metric-card__delta metric-card__delta--positive&quot;&gt;↓ -68% de compressão&lt;/span&gt;
      &lt;/div&gt;
    &lt;/section&gt;

    &lt;!-- Tabela de Sessões com :has() e Glassmorphism --&gt;
    &lt;section class=&quot;table-container&quot;&gt;
      &lt;h3 class=&quot;section-heading&quot;&gt;Monitoramento de Componentes em Tempo Real&lt;/h3&gt;
      &lt;table class=&quot;data-table&quot;&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th&gt;Módulo&lt;/th&gt;
            &lt;th&gt;Tecnologia&lt;/th&gt;
            &lt;th&gt;Render Layer&lt;/th&gt;
            &lt;th&gt;Status&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
          &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Container Queries&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;CSS Containment L3&lt;/td&gt;
            &lt;td&gt;Layout Inline&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;status-pill status-pill--success&quot;&gt;Ativo&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Seletor Relacional&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;CSS Selectors L4 (:has)&lt;/td&gt;
            &lt;td&gt;CSSOM Matching&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;status-pill status-pill--success&quot;&gt;Ativo&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Glassmorphism Core&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;Backdrop Filter &amp; Blur&lt;/td&gt;
            &lt;td&gt;GPU Accelerated&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;status-pill status-pill--warning&quot;&gt;Calibrado&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/section&gt;
  &lt;/main&gt;
&lt;/div&gt;</textarea>
        </div>
    </div>
    
<h3>Folha de Estilos CSS3 (Design Tokens + Layout)</h3>
    <div class="wzw-ide-card" id="wzw-code-80041" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">307 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-80041', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-80041', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line">/* ==========================================================</span>
<span class="wzw-code-line">   1. DESIGN TOKENS GLOBAIS (<span class="wzw-tk-kw">:root</span>)</span>
<span class="wzw-code-line">   ========================================================== */</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">:root</span> {</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--bg-deep: #090d16;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--bg-surface: #111827;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--bg-glass: rgba(17, 24, 39, 0.75);</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--border-subtle: rgba(255, 255, 255, 0.08);</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--border-glow: rgba(0, 240, 255, 0.35);</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--color-cyan: #00f0ff;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--color-green: #10b981;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--color-amber: #f59e0b;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--color-text-main: #f8fafc;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--color-text-muted: #94a3b8;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--font-sans: &#039;Inter&#039;, system-ui, sans-serif;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--radius-lg: 16px;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--radius-md: 10px;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--radius-sm: 6px;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">--transition-smooth: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);</span></span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ==========================================================</span>
<span class="wzw-code-line">   2. RESET DE ESPECIFICIDADE ZERO COM :where()</span>
<span class="wzw-code-line">   ========================================================== */</span>
<span class="wzw-code-line">:where(*, *::before, *::after) {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">box-sizing</span>: border-box;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">margin</span>: 0;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: 0;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ==========================================================</span>
<span class="wzw-code-line">   3. ESTRUTURA DO LAYOUT MESTRE (Grid Responsivo)</span>
<span class="wzw-code-line">   ========================================================== */</span>
<span class="wzw-code-line">.app-layout {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: grid;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-template-columns</span>: <span class="wzw-tk-num">240px</span> <span class="wzw-tk-num">1fr</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">min-height</span>: <span class="wzw-tk-num">100vh</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background-color</span>: var(--bg-deep);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-family</span>: var(--font-sans);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: var(--color-text-main);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ==========================================================</span>
<span class="wzw-code-line">   4. SIDEBAR COM GLASSMORPHISM</span>
<span class="wzw-code-line">   ========================================================== */</span>
<span class="wzw-code-line">.sidebar {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: var(--bg-glass);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">backdrop-filter</span>: blur(<span class="wzw-tk-num">12px</span>);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">-webkit-backdrop-filter</span>: blur(<span class="wzw-tk-num">12px</span>);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-right</span>: <span class="wzw-tk-num">1px</span> solid var(--border-subtle);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">1.5rem</span> <span class="wzw-tk-num">1rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">flex-direction</span>: column;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">2rem</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.sidebar__brand {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">align-items</span>: center;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">0.75rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding-left</span>: <span class="wzw-tk-num">0.5rem</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.brand-icon {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">1.5rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">filter</span>: drop-shadow(0 0 <span class="wzw-tk-num">8px</span> var(--color-cyan));</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.brand-text {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">1.25rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 800;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">letter-spacing</span>: -<span class="wzw-tk-num">0.5px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: var(--color-text-main);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.sidebar__nav {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">flex-direction</span>: column;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">0.5rem</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.nav-item {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">align-items</span>: center;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">0.75rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">0.75rem</span> <span class="wzw-tk-num">1rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: var(--radius-sm);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: var(--color-text-muted);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">text-decoration</span>: none;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 600;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.92rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">transition</span>: var(--transition-smooth);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.nav-item<span class="wzw-tk-kw">:hover</span> {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: rgba(255, 255, 255, 0.05);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: var(--color-text-main);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">transform</span>: translateX(<span class="wzw-tk-num">4px</span>);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.nav-item--active {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: rgba(0, 240, 255, 0.1);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: var(--color-cyan);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-left</span>: <span class="wzw-tk-num">3px</span> solid var(--color-cyan);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ==========================================================</span>
<span class="wzw-code-line">   5. CONTEÚDO PRINCIPAL &amp; TOPBAR</span>
<span class="wzw-code-line">   ========================================================== */</span>
<span class="wzw-code-line">.main-content {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">2rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">flex-direction</span>: column;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">2rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">overflow-y</span>: auto;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.topbar {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">justify-content</span>: space-between;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">align-items</span>: center;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding-bottom</span>: <span class="wzw-tk-num">1.25rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-bottom</span>: <span class="wzw-tk-num">1px</span> solid var(--border-subtle);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.topbar__title {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">1.5rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 800;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">letter-spacing</span>: -<span class="wzw-tk-num">0.5px</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.topbar__user {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">align-items</span>: center;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">1rem</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.user-avatar {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">width</span>: <span class="wzw-tk-num">40px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">height</span>: <span class="wzw-tk-num">40px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: linear-gradient(<span class="wzw-tk-num">135deg</span>, var(--color-cyan), <span class="wzw-tk-num">#3b82f6</span>);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#090d16</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 800;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.85rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: 50%;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">align-items</span>: center;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">justify-content</span>: center;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">box-shadow</span>: 0 0 <span class="wzw-tk-num">12px</span> rgba(0, 240, 255, 0.3);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ==========================================================</span>
<span class="wzw-code-line">   6. BENTO GRID DE MÉTRICAS ANALÍTICAS</span>
<span class="wzw-code-line">   ========================================================== */</span>
<span class="wzw-code-line">.metrics-grid {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: grid;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-template-columns</span>: repeat(auto-fit, minmax(<span class="wzw-tk-num">240px</span>, <span class="wzw-tk-num">1fr</span>));</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">1.5rem</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.metric-card {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: var(--bg-surface);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border</span>: <span class="wzw-tk-num">1px</span> solid var(--border-subtle);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: var(--radius-lg);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">1.5rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">flex-direction</span>: column;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">0.5rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">transition</span>: var(--transition-smooth);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.metric-card<span class="wzw-tk-kw">:hover</span> {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">transform</span>: translateY(-<span class="wzw-tk-num">4px</span>);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-color</span>: var(--border-glow);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">box-shadow</span>: 0 <span class="wzw-tk-num">12px</span> <span class="wzw-tk-num">30px</span> rgba(0, 0, 0, 0.4);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.metric-card--glow-cyan<span class="wzw-tk-kw">:hover</span> { box-shadow: 0 <span class="wzw-tk-num">10px</span> <span class="wzw-tk-num">25px</span> rgba(0, 240, 255, 0.15); }</span>
<span class="wzw-code-line">.metric-card--glow-green<span class="wzw-tk-kw">:hover</span> { box-shadow: 0 <span class="wzw-tk-num">10px</span> <span class="wzw-tk-num">25px</span> rgba(16, 185, 129, 0.15); }</span>
<span class="wzw-code-line">.metric-card--glow-amber<span class="wzw-tk-kw">:hover</span> { box-shadow: 0 <span class="wzw-tk-num">10px</span> <span class="wzw-tk-num">25px</span> rgba(245, 158, 11, 0.15); }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.metric-card__subtitle {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: var(--color-text-muted);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.85rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 600;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">text-transform</span>: uppercase;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">letter-spacing</span>: <span class="wzw-tk-num">0.5px</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.metric-card__value {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">2.2rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 800;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">letter-spacing</span>: -<span class="wzw-tk-num">1px</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.metric-card__delta {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.85rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 700;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.metric-card__delta--positive { color: var(--color-green); }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ==========================================================</span>
<span class="wzw-code-line">   7. TABELA COM GLASSMORPHISM &amp; :has() INTELIGENTE</span>
<span class="wzw-code-line">   ========================================================== */</span>
<span class="wzw-code-line">.table-container {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: var(--bg-surface);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border</span>: <span class="wzw-tk-num">1px</span> solid var(--border-subtle);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: var(--radius-lg);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">1.5rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">flex-direction</span>: column;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">1rem</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.section-heading {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">1.15rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 700;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: var(--color-text-main);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.data-table {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">width</span>: 100%;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-collapse</span>: collapse;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">text-align</span>: left;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.data-table th {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">0.75rem</span> <span class="wzw-tk-num">1rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: var(--color-text-muted);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.82rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">text-transform</span>: uppercase;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">letter-spacing</span>: <span class="wzw-tk-num">0.5px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-bottom</span>: <span class="wzw-tk-num">1px</span> solid var(--border-subtle);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.data-table td {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">1rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-bottom</span>: <span class="wzw-tk-num">1px</span> solid var(--border-subtle);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.95rem</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Transição de Hover nas Linhas */</span></span>
<span class="wzw-code-line">.data-table tbody tr {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">transition</span>: background-color <span class="wzw-tk-num">0.2s</span> ease, opacity <span class="wzw-tk-num">0.2s</span> ease;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.data-table tbody tr<span class="wzw-tk-kw">:hover</span> {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background-color</span>: rgba(255, 255, 255, 0.03);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Mágica do :has() para Dimming de Irmãos na Tabela */</span></span>
<span class="wzw-code-line">.data-table tbody:has(tr<span class="wzw-tk-kw">:hover</span>) tr:not(<span class="wzw-tk-kw">:hover</span>) {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">opacity</span>: 0.45;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ==========================================================</span>
<span class="wzw-code-line">   8. COMPONENTES ATÔMICOS (Badges &amp; Pills)</span>
<span class="wzw-code-line">   ========================================================== */</span>
<span class="wzw-code-line">.status-pill {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: inline-flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">align-items</span>: center;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">4px</span> <span class="wzw-tk-num">10px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">20px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.75rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 700;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.status-pill--success {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: rgba(16, 185, 129, 0.15);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: var(--color-green);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.status-pill--warning {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: rgba(245, 158, 11, 0.15);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: var(--color-amber);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.badge--online {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: rgba(16, 185, 129, 0.2);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: var(--color-green);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">4px</span> <span class="wzw-tk-num">8px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">6px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.75rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 800;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ==========================================================</span>
<span class="wzw-code-line">   9. RESPONSIVIDADE MOBILE-FIRST</span>
<span class="wzw-code-line">   ========================================================== */</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@media</span> (max-width: <span class="wzw-tk-num">768px</span>) {</span>
<span class="wzw-code-line">  .app-layout {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">grid-template-columns</span>: <span class="wzw-tk-num">1fr</span>;</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">  .sidebar {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">border-right</span>: none;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">border-bottom</span>: <span class="wzw-tk-num">1px</span> solid var(--border-subtle);</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">  .main-content {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">1rem</span>;</span>
<span class="wzw-code-line">  }</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* ==========================================================
   1. DESIGN TOKENS GLOBAIS (:root)
   ========================================================== */
:root {
  --bg-deep: #090d16;
  --bg-surface: #111827;
  --bg-glass: rgba(17, 24, 39, 0.75);
  --border-subtle: rgba(255, 255, 255, 0.08);
  --border-glow: rgba(0, 240, 255, 0.35);

  --color-cyan: #00f0ff;
  --color-green: #10b981;
  --color-amber: #f59e0b;
  --color-text-main: #f8fafc;
  --color-text-muted: #94a3b8;

  --font-sans: &#039;Inter&#039;, system-ui, sans-serif;
  --radius-lg: 16px;
  --radius-md: 10px;
  --radius-sm: 6px;

  --transition-smooth: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
}

/* ==========================================================
   2. RESET DE ESPECIFICIDADE ZERO COM :where()
   ========================================================== */
:where(*, *::before, *::after) {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

/* ==========================================================
   3. ESTRUTURA DO LAYOUT MESTRE (Grid Responsivo)
   ========================================================== */
.app-layout {
  display: grid;
  grid-template-columns: 240px 1fr;
  min-height: 100vh;
  background-color: var(--bg-deep);
  font-family: var(--font-sans);
  color: var(--color-text-main);
}

/* ==========================================================
   4. SIDEBAR COM GLASSMORPHISM
   ========================================================== */
.sidebar {
  background: var(--bg-glass);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-right: 1px solid var(--border-subtle);
  padding: 1.5rem 1rem;
  display: flex;
  flex-direction: column;
  gap: 2rem;
}

.sidebar__brand {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding-left: 0.5rem;
}

.brand-icon {
  font-size: 1.5rem;
  filter: drop-shadow(0 0 8px var(--color-cyan));
}

.brand-text {
  font-size: 1.25rem;
  font-weight: 800;
  letter-spacing: -0.5px;
  color: var(--color-text-main);
}

.sidebar__nav {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.nav-item {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.75rem 1rem;
  border-radius: var(--radius-sm);
  color: var(--color-text-muted);
  text-decoration: none;
  font-weight: 600;
  font-size: 0.92rem;
  transition: var(--transition-smooth);
}

.nav-item:hover {
  background: rgba(255, 255, 255, 0.05);
  color: var(--color-text-main);
  transform: translateX(4px);
}

.nav-item--active {
  background: rgba(0, 240, 255, 0.1);
  color: var(--color-cyan);
  border-left: 3px solid var(--color-cyan);
}

/* ==========================================================
   5. CONTEÚDO PRINCIPAL &amp; TOPBAR
   ========================================================== */
.main-content {
  padding: 2rem;
  display: flex;
  flex-direction: column;
  gap: 2rem;
  overflow-y: auto;
}

.topbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-bottom: 1.25rem;
  border-bottom: 1px solid var(--border-subtle);
}

.topbar__title {
  font-size: 1.5rem;
  font-weight: 800;
  letter-spacing: -0.5px;
}

.topbar__user {
  display: flex;
  align-items: center;
  gap: 1rem;
}

.user-avatar {
  width: 40px;
  height: 40px;
  background: linear-gradient(135deg, var(--color-cyan), #3b82f6);
  color: #090d16;
  font-weight: 800;
  font-size: 0.85rem;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 0 12px rgba(0, 240, 255, 0.3);
}

/* ==========================================================
   6. BENTO GRID DE MÉTRICAS ANALÍTICAS
   ========================================================== */
.metrics-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 1.5rem;
}

.metric-card {
  background: var(--bg-surface);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-lg);
  padding: 1.5rem;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  transition: var(--transition-smooth);
}

.metric-card:hover {
  transform: translateY(-4px);
  border-color: var(--border-glow);
  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.4);
}

.metric-card--glow-cyan:hover { box-shadow: 0 10px 25px rgba(0, 240, 255, 0.15); }
.metric-card--glow-green:hover { box-shadow: 0 10px 25px rgba(16, 185, 129, 0.15); }
.metric-card--glow-amber:hover { box-shadow: 0 10px 25px rgba(245, 158, 11, 0.15); }

.metric-card__subtitle {
  color: var(--color-text-muted);
  font-size: 0.85rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.metric-card__value {
  font-size: 2.2rem;
  font-weight: 800;
  letter-spacing: -1px;
}

.metric-card__delta {
  font-size: 0.85rem;
  font-weight: 700;
}

.metric-card__delta--positive { color: var(--color-green); }

/* ==========================================================
   7. TABELA COM GLASSMORPHISM &amp; :has() INTELIGENTE
   ========================================================== */
.table-container {
  background: var(--bg-surface);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-lg);
  padding: 1.5rem;
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

.section-heading {
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--color-text-main);
}

.data-table {
  width: 100%;
  border-collapse: collapse;
  text-align: left;
}

.data-table th {
  padding: 0.75rem 1rem;
  color: var(--color-text-muted);
  font-size: 0.82rem;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  border-bottom: 1px solid var(--border-subtle);
}

.data-table td {
  padding: 1rem;
  border-bottom: 1px solid var(--border-subtle);
  font-size: 0.95rem;
}

/* Transição de Hover nas Linhas */
.data-table tbody tr {
  transition: background-color 0.2s ease, opacity 0.2s ease;
}

.data-table tbody tr:hover {
  background-color: rgba(255, 255, 255, 0.03);
}

/* Mágica do :has() para Dimming de Irmãos na Tabela */
.data-table tbody:has(tr:hover) tr:not(:hover) {
  opacity: 0.45;
}

/* ==========================================================
   8. COMPONENTES ATÔMICOS (Badges &amp; Pills)
   ========================================================== */
.status-pill {
  display: inline-flex;
  align-items: center;
  padding: 4px 10px;
  border-radius: 20px;
  font-size: 0.75rem;
  font-weight: 700;
}

.status-pill--success {
  background: rgba(16, 185, 129, 0.15);
  color: var(--color-green);
}

.status-pill--warning {
  background: rgba(245, 158, 11, 0.15);
  color: var(--color-amber);
}

.badge--online {
  background: rgba(16, 185, 129, 0.2);
  color: var(--color-green);
  padding: 4px 8px;
  border-radius: 6px;
  font-size: 0.75rem;
  font-weight: 800;
}

/* ==========================================================
   9. RESPONSIVIDADE MOBILE-FIRST
   ========================================================== */
@media (max-width: 768px) {
  .app-layout {
    grid-template-columns: 1fr;
  }

  .sidebar {
    border-right: none;
    border-bottom: 1px solid var(--border-subtle);
  }

  .main-content {
    padding: 1rem;
  }
}</textarea>
        </div>
    </div>
    
<div class="wzw-playground-action-bar">
    <span class="wzw-playground-desc">🧪 <strong>Quer ver este código funcionando agora?</strong></span><br />
    <a href="https://webzoneware.com/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener"> Abrir no Playground IDE &rarr;<br />
    </a>
</div>
<h2>4. Ferramentas Web-ZoneWare para o seu Projeto Final</h2>
<p>
    Ao finalizar a construção do seu Dashboard, passe o código pelas ferramentas do portal Web-ZoneWare para validar a conformidade e compactar a entrega:
</p>
<ul>
<li><a href="https://webzoneware.com/web-ferramentas/css-beautify-minify/" target="_blank">Limpador e Formatador CSS</a>: Garanta que todas as variáveis e regras BEM estejam perfeitamente indentadas com 2 espaços de padrão sênior.</li>
<li><a href="https://webzoneware.com/web-ferramentas/cssvalidate/" target="_blank">Validador de CSS Online</a>: Assegure conformidade 100% com os padrões do W3C antes do deploy.</li>
<li><a href="https://webzoneware.com/web-academy/playground-web/" target="_blank">Playground Web IDE</a>: Seu laboratório permanente para testar novas telas e componentes em qualquer dispositivo.</li>
</ul>
<h2>5. Links Oficiais de Autoridade</h2>
<ul>
<li><a href="https://www.w3.org/Style/CSS/" target="_blank" rel="noopener noreferrer">W3C — Folhas de Estilo em Cascata (Portal Oficial do Padrão)</a></li>
<li><a href="https://developer.mozilla.org/pt-BR/docs/Web/CSS" target="_blank" rel="noopener noreferrer">MDN Web Docs — Referência Global de CSS</a></li>
<li><a href="https://open-props.style/" target="_blank" rel="noopener noreferrer">Open Props — Design Tokens Modernos em CSS Puro</a></li>
<li><a href="https://design-tokens.github.io/community-group/format/" target="_blank" rel="noopener noreferrer">Design Tokens Community Group (DTCG W3C Community)</a></li>
</ul>
<h2>6. Exercício Prático de Conclusão da Trilha</h2>
<ol>
<li>Carregue o código do Dashboard no <strong>Playground Web IDE</strong>.</li>
<li>Adicione um botão de alternância de tema (Modo Claro vs. Modo Escuro) redefinindo os valores das variáveis em <code>:root[data-theme="light"]</code>.</li>
<li>Insira um novo widget analítico na seção de estatísticas representando o tempo de resposta do servidor em milissegundos com um badge <code>Fast</code>.</li>
<li>Teste o comportamento responsivo reduzindo a largura da janela até 360px no celular e verifique se o menu e os cards se adaptam sem overflow horizontal.</li>
<li>Passe a folha final pelo <a href="https://webzoneware.com/web-ferramentas/css-beautify-minify/" target="_blank">Minificador CSS</a> e confira a redução de peso atingida.</li>
</ol>
<h2>7. Quiz Final de Conclusão da Trilha CSS3</h2>
<details class="wzw-quiz-card">
<summary><strong>1. Qual a principal vantagem de centralizar cores e espaçamentos em CSS Variables (:root) em vez de valores fixos?</strong></summary>
<div class="wzw-quiz-answer">
<p><strong>Resposta Correta:</strong> Permite criar um sistema coeso de Design Tokens que pode ser atualizado em um único local central, viabilizando temas dinâmicos (como Dark Mode) em tempo de execução sem duplicar código na cascata.</p>
</p></div>
</details>
<details class="wzw-quiz-card">
<summary><strong>2. Por que a combinação de CSS Grid no layout macro e Flexbox nos componentes internos é o padrão da indústria?</strong></summary>
<div class="wzw-quiz-answer">
<p><strong>Resposta Correta:</strong> Porque o CSS Grid é especialista em alinhamento bidimensional (linhas e colunas simultâneas para o esqueleto geral), enquanto o Flexbox é imbatível para alinhamento unidimensional (distribuição linear e centralização de botões, ícones e cabeçalhos).</p>
</p></div>
</details>
<details class="wzw-quiz-card">
<summary><strong>3. Como o efeito de Glassmorphism com backdrop-filter difere da propriedade filter tradicional?</strong></summary>
<div class="wzw-quiz-answer">
<p><strong>Resposta Correta:</strong> A propriedade <code>filter</code> borra o próprio elemento e todo o seu texto interno. Já o <code>backdrop-filter</code> aplica o desfoque gaussiano exclusivamente à área gráfica localizada atrás da caixa translúcida, mantendo o texto perfeitamente nítido e legível.</p>
</p></div>
</details>
<p><!-- Marcação Estruturada Schema.org (JSON-LD) --><br />
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "Projeto Final: Design System & Dashboard Completo em CSS3",
  "description": "Construa um Design System e Dashboard completo em CSS3 aplicando tokens, Grid, Flexbox, BEM, animações e Glassmorphism.",
  "url": "https://webzoneware.com/web-academy/css/projeto-pratico-design-system-dashboard-css3/",
  "inLanguage": "pt-BR",
  "isPartOf": {
    "@type": "Course",
    "name": "Curso de CSS & CSS3 Completo",
    "url": "https://webzoneware.com/web-academy/css/",
    "provider": {
      "@type": "Organization",
      "name": "Web-ZoneWare",
      "url": "https://webzoneware.com"
    }
  },
  "proficiencyLevel": "Advanced",
  "author": {
    "@type": "Organization",
    "name": "Web-ZoneWare Academy"
  }
}
</script></p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/projeto-pratico-design-system-dashboard-css3/">Projeto Final: Design System e Dashboard — Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-academy/curso-css/projeto-pratico-design-system-dashboard-css3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Performance e Otimização de CSS na Web &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-css/performance-otimizacao-css-cleaner/</link>
					<comments>https://webzoneware.com/web-academy/curso-css/performance-otimizacao-css-cleaner/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 04:43:29 +0000</pubDate>
				<category><![CDATA[Curso de CSS e CSS3]]></category>
		<category><![CDATA[core web vitals]]></category>
		<category><![CDATA[critical css]]></category>
		<category><![CDATA[minificacao css]]></category>
		<category><![CDATA[otimizacao css]]></category>
		<category><![CDATA[performance css]]></category>
		<category><![CDATA[render blocking css]]></category>
		<category><![CDATA[web academy]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29478</guid>

					<description><![CDATA[<p>No desenvolvimento front-end profissional, escrever um CSS visualmente impecável é apenas metade do trabalho: se as folhas de estilo forem pesadas, redundantes ou mal estruturadas, o navegador sofrerá atrasos severos para exibir o primeiro pixel na tela. O CSS é, por natureza, um recurso Render-Blocking (bloqueador de renderização). Dominar técnicas de minificação, extração de Critical [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/performance-otimizacao-css-cleaner/">Performance e Otimização de CSS na Web | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">
    No desenvolvimento front-end profissional, escrever um CSS visualmente impecável é apenas metade do trabalho: se as folhas de estilo forem pesadas, redundantes ou mal estruturadas, o navegador sofrerá atrasos severos para exibir o primeiro pixel na tela. O CSS é, por natureza, um recurso <strong>Render-Blocking</strong> (bloqueador de renderização). Dominar técnicas de minificação, extração de <em>Critical CSS</em>, otimização de renderização na GPU e auditoria de <em>Core Web Vitals</em> é o divisor de águas entre um site amador lento e uma aplicação web de alto desempenho.
</p>
<div class="wzw-callout wzw-callout-info">
<div class="wzw-callout-icon">⚡</div>
<div>
        <strong>O que é Render-Blocking?</strong> Enquanto o navegador baixa uma folha de estilos externa e constrói a árvore <strong>CSSOM</strong> (<em>CSS Object Model</em>), ele interrompe completamente a pintura visual da página. Quanto maior o arquivo CSS e mais complexos forem os seletores, mais tempo o usuário passa diante de uma tela em branco no celular.
    </div>
</div>
<h2>1. O Caminho Crítico de Renderização (Critical Rendering Path)</h2>
<p>
    Para renderizar uma página, o motor do navegador executa uma sequência rigorosa de etapas:
</p>
<ol>
<li><strong>Construção do DOM &#038; CSSOM:</strong> O HTML é convertido no DOM e as regras CSS são estruturadas no CSSOM.</li>
<li><strong>Árvore de Renderização (Render Tree):</strong> O navegador combina apenas os nós visíveis do DOM com as regras calculadas do CSSOM.</li>
<li><strong>Layout (Reflow):</strong> O navegador calcula a geometria exata, largura, altura e posição de cada elemento na tela.</li>
<li><strong>Pintura (Paint / Repaint):</strong> Os pixels de cores, fundos, bordas e sombras são desenhados na memória.</li>
<li><strong>Composição (Composite):</strong> As diferentes camadas gráficas são combinadas e enviadas para a tela através da GPU.</li>
</ol>
<div class="wzw-callout wzw-callout-pro">
<div class="wzw-callout-icon">🚀</div>
<div>
        <strong>A Regra de Ouro das Animações a 60 FPS:</strong><br />
        <br />Evite animar propriedades que forçam <strong>Layout/Reflow</strong> (como <code>width</code>, <code>height</code>, <code>top</code>, <code>left</code>, <code>margin</code>).<br />
        <br />Prefira sempre animar propriedades gerenciadas diretamente na camada de <strong>Composição (GPU)</strong>: <code>transform</code> (translate, scale, rotate) e <code>opacity</code>.
    </div>
</div>
<h2>2. Critical CSS: Eliminando o Bloqueio de Renderização</h2>
<p>
    O conceito de <strong>Critical CSS</strong> consiste em isolar apenas os estilos estritamente necessários para desenhar a primeira dobra visível da tela (a área <em>above-the-fold</em> visível sem rolar a página):
</p>
<ul>
<li><strong>Passo 1 (Inline no &lt;head&gt;):</strong> As regras críticas (cabeçalho, tipografia inicial e estrutura da dobra) são inseridas diretamente em uma tag <code>&lt;style&gt;</code> no <code>&lt;head&gt;</code> do documento HTML.</li>
<li><strong>Passo 2 (Carregamento Assíncrono):</strong> A folha de estilos completa com os estilos do rodapé, modais e áreas secundárias é carregada de forma assíncrona, sem travar o carregamento inicial:</li>
</ul>
    <div class="wzw-ide-card" id="wzw-code-74249" data-lang="html">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML5</span>
                                <span class="wzw-ide-lines-count">3 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-74249', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-74249', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- Carregamento assíncrono e não-bloqueante do CSS não crítico --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;link</span> <span class="wzw-tk-attr">rel</span>=<span class="wzw-tk-str">&quot;preload&quot;</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;estilos-completos.css&quot;</span> <span class="wzw-tk-attr">as</span>=<span class="wzw-tk-str">&quot;style&quot;</span> <span class="wzw-tk-attr">onload</span>=<span class="wzw-tk-str">&quot;this.onload=null;this.rel=&#039;stylesheet&#039;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;noscript&gt;</span><span class="wzw-tk-tag">&lt;link</span> <span class="wzw-tk-attr">rel</span>=<span class="wzw-tk-str">&quot;stylesheet&quot;</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;estilos-completos.css&quot;</span><span class="wzw-tk-tag">&gt;</span><span class="wzw-tk-tag">&lt;/noscript&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!-- Carregamento assíncrono e não-bloqueante do CSS não crítico --&gt;
&lt;link rel=&quot;preload&quot; href=&quot;estilos-completos.css&quot; as=&quot;style&quot; onload=&quot;this.onload=null;this.rel=&#039;stylesheet&#039;&quot;&gt;
&lt;noscript&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;estilos-completos.css&quot;&gt;&lt;/noscript&gt;</textarea>
        </div>
    </div>
    
<h2>3. Minificação, Compressão e Limpeza de Código Morto</h2>
<p>
    Espaços em branco, comentários longos e regras duplicadas aumentam o consumo de banda sem trazer nenhum valor para a máquina do usuário:
</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th>Técnica de Otimização</th>
<th>Como Funciona</th>
<th>Ganho Médio de Desempenho</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Minificação CSS</strong></td>
<td>Remove quebras de linha, tabulações e comentários, abreviando cores e unidades.</td>
<td>20% a 40% de redução no tamanho do arquivo bruto.</td>
</tr>
<tr>
<td><strong>Compressão Gzip / Brotli</strong></td>
<td>Algoritmo de compressão executado pelo servidor web (Nginx/Apache) durante o envio.</td>
<td>60% a 80% de redução no tráfego de rede (transfer size).</td>
</tr>
<tr>
<td><strong>Remoção de Dead Code (Purge)</strong></td>
<td>Varre o HTML/JS e descarta classes e seletores CSS que nunca são utilizados em nenhuma página.</td>
<td>Elimina até 90% do peso em frameworks e bibliotecas prontas.</td>
</tr>
</tbody>
</table>
</div>
<h2>4. Otimização de Fontes com font-display: swap</h2>
<p>
    Quando uma página utiliza fontes personalizadas da web (Google Fonts ou arquivos <code>.woff2</code> locais), o navegador pode esconder todo o texto da tela até a fonte terminar de baixar — um problema conhecido como <strong>FOIT</strong> (<em>Flash of Invisible Text</em>).
</p>
<p>
    Para evitar que o usuário encare uma página sem texto legível, declare sempre <code>font-display: swap;</code> na regra <code>@font-face</code>:
</p>
    <div class="wzw-ide-card" id="wzw-code-91122" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">6 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-91122', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-91122', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-kw">@font-face</span> {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-family</span>: <span class="wzw-tk-str">&#039;Outfit&#039;</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">src</span>: url(<span class="wzw-tk-str">&#039;/fonts/outfit-variable.woff2&#039;</span>) format(<span class="wzw-tk-str">&#039;woff2&#039;</span>);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 100 900;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-display</span>: swap; /* Exibe fonte do sistema imediatamente e troca quando carregar */</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>@font-face {
  font-family: &#039;Outfit&#039;;
  src: url(&#039;/fonts/outfit-variable.woff2&#039;) format(&#039;woff2&#039;);
  font-weight: 100 900;
  font-display: swap; /* Exibe fonte do sistema imediatamente e troca quando carregar */
}</textarea>
        </div>
    </div>
    
<h2>5. content-visibility: auto (Aceleração Nativa de Páginas Longas)</h2>
<p>
    Uma das propriedades mais poderosas do CSS contemporâneo é o <code>content-visibility: auto;</code>. Ele instrui o motor de renderização do navegador a ignorar totalmente o cálculo de layout e a pintura de elementos que estão fora da tela (<em>off-screen</em>) até que o usuário role a página até próximo deles:
</p>
    <div class="wzw-ide-card" id="wzw-code-38612" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">6 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-38612', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-38612', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">/* Seções longas abaixo da dobra economizam tempo maciço de renderização */</span></span>
<span class="wzw-code-line">.long-content-section,</span>
<span class="wzw-code-line">.footer-complex {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">content-visibility</span>: auto;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">contain-intrinsic-size</span>: 0 <span class="wzw-tk-num">500px</span>; /* Altura estimada para evitar pulos de rolagem */</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* Seções longas abaixo da dobra economizam tempo maciço de renderização */
.long-content-section,
.footer-complex {
  content-visibility: auto;
  contain-intrinsic-size: 0 500px; /* Altura estimada para evitar pulos de rolagem */
}</textarea>
        </div>
    </div>
    
<h2>6. Laboratório Prático: Comparativo de Performance (CPU Reflow vs. GPU Composite)</h2>
<p>
    Analise o experimento abaixo. Ele coloca lado a lado duas estratégias de movimentação de elementos: o método lento tradicional (alterando <code>left</code>, que força o ciclo completo de Layout e Paint a cada frame) contra o método performático moderno (utilizando <code>transform: translateX</code> na camada de Composição da GPU):
</p>
    <div class="wzw-ide-card" id="wzw-code-47894" data-lang="html">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML5</span>
                                <span class="wzw-ide-lines-count">11 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-47894', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-47894', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;benchmark-container&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;benchmark-track&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;track-label&quot;</span><span class="wzw-tk-tag">&gt;</span>Método Lento (Reflow / Layout CPU via left):<span class="wzw-tk-tag">&lt;/span&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;box box--slow&quot;</span><span class="wzw-tk-tag">&gt;</span>CPU<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;benchmark-track&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;track-label&quot;</span><span class="wzw-tk-tag">&gt;</span>Método Otimizado (Composite GPU via transform):<span class="wzw-tk-tag">&lt;/span&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;box box--fast&quot;</span><span class="wzw-tk-tag">&gt;</span>GPU<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/div&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;div class=&quot;benchmark-container&quot;&gt;
  &lt;div class=&quot;benchmark-track&quot;&gt;
    &lt;span class=&quot;track-label&quot;&gt;Método Lento (Reflow / Layout CPU via left):&lt;/span&gt;
    &lt;div class=&quot;box box--slow&quot;&gt;CPU&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;benchmark-track&quot;&gt;
    &lt;span class=&quot;track-label&quot;&gt;Método Otimizado (Composite GPU via transform):&lt;/span&gt;
    &lt;div class=&quot;box box--fast&quot;&gt;GPU&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;</textarea>
        </div>
    </div>
    
    <div class="wzw-ide-card" id="wzw-code-92239" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">70 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-92239', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-92239', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line">.benchmark-container {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">flex-direction</span>: column;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">1.5rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#0f172a</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">1.5rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">12px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border</span>: <span class="wzw-tk-num">1px</span> solid <span class="wzw-tk-num">#334155</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.benchmark-track {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">flex-direction</span>: column;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">0.5rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">position</span>: relative;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">height</span>: <span class="wzw-tk-num">90px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#1e293b</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">8px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">0.75rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">overflow</span>: hidden;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.track-label {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.85rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#94a3b8</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-family</span>: <span class="wzw-tk-str">&#039;Inter&#039;</span>, sans-serif;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.box {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">width</span>: <span class="wzw-tk-num">44px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">height</span>: <span class="wzw-tk-num">44px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">8px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">align-items</span>: center;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">justify-content</span>: center;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 800;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-family</span>: <span class="wzw-tk-str">&#039;Inter&#039;</span>, sans-serif;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.85rem</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* 1. Animação Lenta: Força recálculo de Layout e Repaint a cada frame */</span></span>
<span class="wzw-code-line">.box--slow {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#ef4444</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#ffffff</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">position</span>: absolute;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">bottom</span>: <span class="wzw-tk-num">10px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">left</span>: <span class="wzw-tk-num">10px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">animation</span>: move-cpu <span class="wzw-tk-num">3s</span> ease-in-out infinite alternate;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@keyframes</span> move-cpu {</span>
<span class="wzw-code-line">  0% { left: <span class="wzw-tk-num">10px</span>; }</span>
<span class="wzw-code-line">  100% { left: calc(100% - <span class="wzw-tk-num">54px</span>); }</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* 2. Animação Fluida: Processada inteiramente na GPU sem disparar Reflow */</span></span>
<span class="wzw-code-line">.box--fast {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#00f0ff</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#090d16</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">position</span>: absolute;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">bottom</span>: <span class="wzw-tk-num">10px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">left</span>: <span class="wzw-tk-num">10px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">will-change</span>: transform;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">animation</span>: move-gpu <span class="wzw-tk-num">3s</span> ease-in-out infinite alternate;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@keyframes</span> move-gpu {</span>
<span class="wzw-code-line">  0% { transform: translateX(0); }</span>
<span class="wzw-code-line">  100% { transform: translateX(calc(100% - <span class="wzw-tk-num">54px</span>)); }</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.benchmark-container {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
  background: #0f172a;
  padding: 1.5rem;
  border-radius: 12px;
  border: 1px solid #334155;
}

.benchmark-track {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  position: relative;
  height: 90px;
  background: #1e293b;
  border-radius: 8px;
  padding: 0.75rem;
  overflow: hidden;
}

.track-label {
  font-size: 0.85rem;
  color: #94a3b8;
  font-family: &#039;Inter&#039;, sans-serif;
}

.box {
  width: 44px;
  height: 44px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 800;
  font-family: &#039;Inter&#039;, sans-serif;
  font-size: 0.85rem;
}

/* 1. Animação Lenta: Força recálculo de Layout e Repaint a cada frame */
.box--slow {
  background: #ef4444;
  color: #ffffff;
  position: absolute;
  bottom: 10px;
  left: 10px;
  animation: move-cpu 3s ease-in-out infinite alternate;
}

@keyframes move-cpu {
  0% { left: 10px; }
  100% { left: calc(100% - 54px); }
}

/* 2. Animação Fluida: Processada inteiramente na GPU sem disparar Reflow */
.box--fast {
  background: #00f0ff;
  color: #090d16;
  position: absolute;
  bottom: 10px;
  left: 10px;
  will-change: transform;
  animation: move-gpu 3s ease-in-out infinite alternate;
}

@keyframes move-gpu {
  0% { transform: translateX(0); }
  100% { transform: translateX(calc(100% - 54px)); }
}</textarea>
        </div>
    </div>
    
<div class="wzw-playground-action-bar">
    <span class="wzw-playground-desc">🧪 <strong>Quer ver este código funcionando agora?</strong></span><br />
    <a href="https://webzoneware.com/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener"> Abrir no Playground IDE &rarr;<br />
    </a>
</div>
<h2>7. Ferramentas Web-ZoneWare para o seu Setup de Performance</h2>
<p>
    Ao preparar folhas de estilo para produção, utilize as ferramentas dedicadas do portal Web-ZoneWare:
</p>
<ul>
<li><a href="https://webzoneware.com/web-ferramentas/css-beautify-minify/" target="_blank">Limpador e Minificador CSS</a>: Comprima folhas de estilo eliminando espaços, comentários e redundâncias com um único clique antes do deploy.</li>
<li><a href="https://webzoneware.com/web-ferramentas/cssvalidate/" target="_blank">Validador de CSS Online</a>: Detecte erros de sintaxe e propriedades obsoletas que sobrecarregam o analisador do navegador.</li>
<li><a href="https://webzoneware.com/web-academy/playground-web/" target="_blank">Playground Web IDE</a>: Ambiente em nuvem para inspecionar animações fluidas e verificar o comportamento de renderização em tempo real.</li>
</ul>
<h2>8. Links Oficiais de Autoridade</h2>
<ul>
<li><a href="https://web.dev/explore/fast" target="_blank" rel="noopener noreferrer">Google web.dev — Guia de Performance &#038; Métricas Web Vitals</a></li>
<li><a href="https://developer.mozilla.org/pt-BR/docs/Web/Performance/Critical_rendering_path" target="_blank" rel="noopener noreferrer">MDN Web Docs — Otimização do Caminho Crítico de Renderização</a></li>
<li><a href="https://web.dev/articles/content-visibility" target="_blank" rel="noopener noreferrer">Google web.dev — content-visibility: Acelerando o Tempo de Renderização</a></li>
<li><a href="https://www.w3.org/TR/css-contain-2/" target="_blank" rel="noopener noreferrer">W3C — CSS Containment Module Level 2</a></li>
</ul>
<h2>9. Exercício Prático da Lição 49</h2>
<ol>
<li>Abra o <strong>Playground Web IDE</strong> clicando no botão de ação da lição.</li>
<li>Crie um card com efeito de hover. Teste a diferença entre animar a propriedade <code>top: -10px</code> e a propriedade <code>transform: translateY(-10px)</code>.</li>
<li>Abra as ferramentas de desenvolvedor do navegador (tecla <code>F12</code>), acesse a aba <em>Rendering</em> e ative a opção <strong>Paint Flashing</strong> (Retângulos Verdes de Pintura).</li>
<li>Observe como o método com <code>top</code> acende retângulos verdes a cada milissegundo de animação (Repaint custoso), enquanto o método com <code>transform</code> se move de forma limpa na GPU sem causar repintura da tela.</li>
<li>Pegue o código CSS resultante e passe pela ferramenta <a href="https://webzoneware.com/web-ferramentas/css-beautify-minify/" target="_blank">Minificador CSS</a> para checar a taxa de compressão obtida.</li>
</ol>
<h2>10. Quiz de Fixação Interativo</h2>
<details class="wzw-quiz-card">
<summary><strong>1. Por que o CSS é considerado um recurso &#8220;Render-Blocking&#8221;?</strong></summary>
<div class="wzw-quiz-answer">
<p><strong>Resposta Correta:</strong> Porque o navegador bloqueia a pintura de qualquer elemento visual na tela até que todas as folhas de estilo externas vinculadas no <code>&lt;head&gt;</code> sejam baixadas e a árvore CSSOM seja totalmente construída.</p>
</p></div>
</details>
<details class="wzw-quiz-card">
<summary><strong>2. Qual é a principal vantagem de animar propriedades como transform e opacity em vez de top e width?</strong></summary>
<div class="wzw-quiz-answer">
<p><strong>Resposta Correta:</strong> <code>transform</code> e <code>opacity</code> não exigem recálculo de geometria (Layout/Reflow) nem repintura de pixels (Paint); suas alterações são processadas diretamente na GPU durante a etapa de Composição (Composite), garantindo animações lisas a 60 FPS.</p>
</p></div>
</details>
<details class="wzw-quiz-card">
<summary><strong>3. Para que serve a propriedade font-display: swap declarada dentro de @font-face?</strong></summary>
<div class="wzw-quiz-answer">
<p><strong>Resposta Correta:</strong> Evita o &#8220;Flash of Invisible Text&#8221; (FOIT), instruindo o navegador a exibir imediatamente o texto com uma fonte nativa do sistema operacional enquanto a web font personalizada está sendo baixada, trocando-a suavemente assim que a transferência for concluída.</p>
</p></div>
</details>
<p><!-- Marcação Estruturada Schema.org (JSON-LD) --><br />
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "Performance e Otimização de CSS para Web Vitals",
  "description": "Otimize seu CSS para acelerar o carregamento, eliminar render-blocking e conquistar pontuação máxima no Core Web Vitals.",
  "url": "https://webzoneware.com/web-academy/css/performance-otimizacao-css-cleaner/",
  "inLanguage": "pt-BR",
  "isPartOf": {
    "@type": "Course",
    "name": "Curso de CSS & CSS3 Completo",
    "url": "https://webzoneware.com/web-academy/css/",
    "provider": {
      "@type": "Organization",
      "name": "Web-ZoneWare",
      "url": "https://webzoneware.com"
    }
  },
  "proficiencyLevel": "Advanced",
  "author": {
    "@type": "Organization",
    "name": "Web-ZoneWare Academy"
  }
}
</script></p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/performance-otimizacao-css-cleaner/">Performance e Otimização de CSS na Web | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-academy/curso-css/performance-otimizacao-css-cleaner/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Metodologia BEM e Arquitetura de CSS &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-css/metodologia-bem-arquitetura-css/</link>
					<comments>https://webzoneware.com/web-academy/curso-css/metodologia-bem-arquitetura-css/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 04:38:53 +0000</pubDate>
				<category><![CDATA[Curso de CSS e CSS3]]></category>
		<category><![CDATA[arquitetura css]]></category>
		<category><![CDATA[boas praticas css]]></category>
		<category><![CDATA[design system]]></category>
		<category><![CDATA[especificidade css]]></category>
		<category><![CDATA[metodologia bem]]></category>
		<category><![CDATA[organizacao css]]></category>
		<category><![CDATA[web academy]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29475</guid>

					<description><![CDATA[<p>Conforme um projeto cresce de dezenas para milhares de linhas de código, o maior pesadelo de uma equipe é a manutenção do CSS: alterações feitas em um botão da página de contato quebram acidentalmente o cabeçalho do blog, seletores aninhados exigem dezenas de declarações !important e ninguém tem coragem de deletar regras antigas por medo [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/metodologia-bem-arquitetura-css/">Metodologia BEM e Arquitetura de CSS | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">
    Conforme um projeto cresce de dezenas para milhares de linhas de código, o maior pesadelo de uma equipe é a manutenção do CSS: alterações feitas em um botão da página de contato quebram acidentalmente o cabeçalho do blog, seletores aninhados exigem dezenas de declarações <code>!important</code> e ninguém tem coragem de deletar regras antigas por medo de efeitos colaterais. Para solucionar esse caos, foi concebida a <strong>Metodologia BEM</strong> (<em>Block, Element, Modifier</em>), uma convenção de nomenclatura e arquitetura que traz previsibilidade, modularidade e controle absoluto sobre a especificidade.
</p>
<div class="wzw-callout wzw-callout-info">
<div class="wzw-callout-icon">🏛️</div>
<div>
        <strong>Origem e Filosofia:</strong> Desenvolvida originalmente pelos engenheiros da Yandex para gerenciar portais com centenas de desenvolvedores trabalhando simultaneamente, o BEM parte de uma premissa elegante: <strong>cada pedaço da interface deve ser um componente independente, auto-documentado e imune a conflitos de cascata</strong>.
    </div>
</div>
<h2>1. A Anatomia do BEM: Bloco, Elemento e Modificador</h2>
<p>
    A sigla <strong>BEM</strong> divide a interface do usuário em três camadas conceituais estritas, refletidas diretamente no nome das classes CSS:
</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th>Conceito</th>
<th>Sintaxe de Classe</th>
<th>Definição &#038; Papel na Interface</th>
<th>Exemplos Reais</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Bloco (Block)</strong></td>
<td><code>.bloco</code></td>
<td>Entidade visual autônoma que faz sentido por si só. Pode ser movida para qualquer lugar da página sem quebrar.</td>
<td><code>.card</code>, <code>.btn</code>, <code>.navbar</code>, <code>.modal</code></td>
</tr>
<tr>
<td><strong>Elemento (Element)</strong></td>
<td><code>.bloco__elemento</code></td>
<td>Parte constituinte do bloco. Não faz sentido de forma isolada fora do contexto do seu bloco pai. Ligado por <strong>dois sublinhados (<code>__</code>)</strong>.</td>
<td><code>.card__title</code>, <code>.card__image</code>, <code>.navbar__link</code></td>
</tr>
<tr>
<td><strong>Modificador (Modifier)</strong></td>
<td><code>.bloco--modificador</code> ou <code>.bloco__elem--mod</code></td>
<td>Uma bandeira de variação visual ou estado. Altera aparência, tema ou comportamento. Ligado por <strong>dois hifens (<code>--</code>)</strong>.</td>
<td><code>.btn--primary</code>, <code>.btn--large</code>, <code>.card--featured</code></td>
</tr>
</tbody>
</table>
</div>
<h2>2. Por que o BEM é Tão Eficiente na Prática?</h2>
<h3>A. Especificidade Plana (Single-Class Specificity)</h3>
<p>
    No CSS desorganizado tradicional, seletores aninhados profundos criam uma barreira de especificidade intransponível:
</p>
    <div class="wzw-ide-card" id="wzw-code-78984" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">9 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-78984', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-78984', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">/* CSS Tradicional (Pesadelo de Especificidade: 0-3-1) */</span></span>
<span class="wzw-code-line"><span class="wzw-tk-comment">#sidebar div.container ul.menu li a {</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#38bdf8</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Com a Metodologia BEM (Especificidade Plana: 0-1-0) */</span></span>
<span class="wzw-code-line">.menu__link {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#38bdf8</span>;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* CSS Tradicional (Pesadelo de Especificidade: 0-3-1) */
#sidebar div.container ul.menu li a {
  color: #38bdf8;
}

/* Com a Metodologia BEM (Especificidade Plana: 0-1-0) */
.menu__link {
  color: #38bdf8;
}</textarea>
        </div>
    </div>
    
<p>
    Ao manter todos os seletores com peso de classe única <code>(0, 1, 0)</code>, qualquer modificador subsequente (como <code>.menu__link--active</code>) consegue sobrescrever propriedades sem esforço e sem necessidade de recorrer a <code>!important</code>.
</p>
<h3>B. Auto-documentação no HTML</h3>
<p>
    Ao bater o olho em um trecho de HTML estruturado com BEM, você compreende imediatamente a hierarquia e o propósito de cada tag sem precisar abrir a folha de estilos:
</p>
    <div class="wzw-ide-card" id="wzw-code-20140" data-lang="html">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML5</span>
                                <span class="wzw-ide-lines-count">9 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-20140', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-20140', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- Estrutura Clara e Auto-explicativa com BEM --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;article</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;card card--featured&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;img</span> <span class="wzw-tk-attr">src</span>=<span class="wzw-tk-str">&quot;capa.webp&quot;</span> <span class="wzw-tk-attr">alt</span>=<span class="wzw-tk-str">&quot;Curso&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;card__thumbnail&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;card__content&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;h3</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;card__title&quot;</span><span class="wzw-tk-tag">&gt;</span>CSS3 Profissional<span class="wzw-tk-tag">&lt;/h3&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;card__excerpt&quot;</span><span class="wzw-tk-tag">&gt;</span>Domine a estilização moderna de interfaces.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;btn btn--primary btn--large&quot;</span><span class="wzw-tk-tag">&gt;</span>Acessar Aula<span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/article&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!-- Estrutura Clara e Auto-explicativa com BEM --&gt;
&lt;article class=&quot;card card--featured&quot;&gt;
  &lt;img src=&quot;capa.webp&quot; alt=&quot;Curso&quot; class=&quot;card__thumbnail&quot;&gt;
  &lt;div class=&quot;card__content&quot;&gt;
    &lt;h3 class=&quot;card__title&quot;&gt;CSS3 Profissional&lt;/h3&gt;
    &lt;p class=&quot;card__excerpt&quot;&gt;Domine a estilização moderna de interfaces.&lt;/p&gt;
    &lt;a href=&quot;#&quot; class=&quot;btn btn--primary btn--large&quot;&gt;Acessar Aula&lt;/a&gt;
  &lt;/div&gt;
&lt;/article&gt;</textarea>
        </div>
    </div>
    
<h2>3. Os 3 Erros Mais Comuns com BEM (e Como Evitá-los)</h2>
<div class="wzw-callout wzw-callout-pro">
<div class="wzw-callout-icon">⚠️</div>
<div>
        <strong>Erro 1: O &#8220;Grandchildren Trap&#8221; (Aninhamento Infinito de Elementos)</strong><br />
        <br /><strong>Errado:</strong> <code>.card__header__title__link</code> ❌<br />
        <br /><strong>Correto:</strong> <code>.card__title-link</code> ou apenas <code>.card__link</code> ✔️<br />
        <br /><em>Regra de ouro:</em> Elementos BEM pertencem sempre ao <strong>Bloco raiz</strong>, independentemente de quão profundos estejam no DOM. Jamais use <code>__</code> duplo em série!
    </div>
</div>
<p><strong>Erro 2: Vincular Nomes a Tags HTML em vez de Funções:</strong></p>
<p>Evite classes como <code>.card__h3</code> ou <code>.menu__li</code>. Se a hierarquia de títulos mudar para um <code>&lt;h4&gt;</code> por motivos de SEO, o nome da classe ficará incoerente. Prefira sempre nomes funcionais: <code>.card__heading</code>, <code>.menu__item</code>.</p>
<p><strong>Erro 3: Misturar Margens de Layout Externo no Próprio Bloco:</strong></p>
<p>Um bloco deve ser reutilizável. Se você declarar <code>margin: 40px auto;</code> diretamente em <code>.btn</code> ou <code>.card</code>, esse componente não poderá ser reaproveitado em uma barra lateral apertada. Deixe que o contêiner pai gerencie o posicionamento ou utilize utilitários de espaçamento.</p>
<h2>4. Laboratório Prático: Componente de Produto Modular com BEM</h2>
<p>
    Observe abaixo um componente de produto construído integralmente com a metodologia BEM, incluindo o bloco principal, elementos internos e modificadores de destaque:
</p>
    <div class="wzw-ide-card" id="wzw-code-75698" data-lang="html">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML5</span>
                                <span class="wzw-ide-lines-count">17 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-75698', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-75698', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;catalog-grid&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">&lt;!-- Card Normal --&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;product-card&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;product-card__badge&quot;</span><span class="wzw-tk-tag">&gt;</span>Novo<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;h3</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;product-card__title&quot;</span><span class="wzw-tk-tag">&gt;</span>Teclado Mecânico RGB<span class="wzw-tk-tag">&lt;/h3&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;product-card__price&quot;</span><span class="wzw-tk-tag">&gt;</span>R$ 299,00<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;button</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;btn btn--secondary&quot;</span><span class="wzw-tk-tag">&gt;</span>Ver Detalhes<span class="wzw-tk-tag">&lt;/button&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">  <span class="wzw-tk-comment">&lt;!-- Card com Modificador de Destaque --&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;product-card product-card--featured&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;product-card__badge product-card__badge--glow&quot;</span><span class="wzw-tk-tag">&gt;</span>Mais Vendido<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;h3</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;product-card__title&quot;</span><span class="wzw-tk-tag">&gt;</span>Monitor Gamer 144Hz<span class="wzw-tk-tag">&lt;/h3&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;product-card__price&quot;</span><span class="wzw-tk-tag">&gt;</span>R$ 1.199,00<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;button</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;btn btn--primary btn--pulse&quot;</span><span class="wzw-tk-tag">&gt;</span>Comprar Agora<span class="wzw-tk-tag">&lt;/button&gt;</span></span>
<span class="wzw-code-line">  <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/div&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;div class=&quot;catalog-grid&quot;&gt;
  &lt;!-- Card Normal --&gt;
  &lt;div class=&quot;product-card&quot;&gt;
    &lt;div class=&quot;product-card__badge&quot;&gt;Novo&lt;/div&gt;
    &lt;h3 class=&quot;product-card__title&quot;&gt;Teclado Mecânico RGB&lt;/h3&gt;
    &lt;p class=&quot;product-card__price&quot;&gt;R$ 299,00&lt;/p&gt;
    &lt;button class=&quot;btn btn--secondary&quot;&gt;Ver Detalhes&lt;/button&gt;
  &lt;/div&gt;

  &lt;!-- Card com Modificador de Destaque --&gt;
  &lt;div class=&quot;product-card product-card--featured&quot;&gt;
    &lt;div class=&quot;product-card__badge product-card__badge--glow&quot;&gt;Mais Vendido&lt;/div&gt;
    &lt;h3 class=&quot;product-card__title&quot;&gt;Monitor Gamer 144Hz&lt;/h3&gt;
    &lt;p class=&quot;product-card__price&quot;&gt;R$ 1.199,00&lt;/p&gt;
    &lt;button class=&quot;btn btn--primary btn--pulse&quot;&gt;Comprar Agora&lt;/button&gt;
  &lt;/div&gt;
&lt;/div&gt;</textarea>
        </div>
    </div>
    
    <div class="wzw-ide-card" id="wzw-code-86827" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">109 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-86827', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-86827', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line">/* ==========================================================</span>
<span class="wzw-code-line">   BLOCO 1: .product-card</span>
<span class="wzw-code-line">   ========================================================== */</span>
<span class="wzw-code-line">.product-card {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">flex-direction</span>: column;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#1e293b</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border</span>: <span class="wzw-tk-num">1px</span> solid <span class="wzw-tk-num">#334155</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">12px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">1.5rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">transition</span>: transform <span class="wzw-tk-num">0.2s</span> ease, border-color <span class="wzw-tk-num">0.2s</span> ease;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.product-card<span class="wzw-tk-kw">:hover</span> {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">transform</span>: translateY(-<span class="wzw-tk-num">4px</span>);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-color</span>: <span class="wzw-tk-num">#475569</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Elementos do Bloco product-card */</span></span>
<span class="wzw-code-line">.product-card__badge {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">align-self</span>: flex-start;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#334155</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#f8fafc</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.75rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 700;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">3px</span> <span class="wzw-tk-num">10px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">20px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">margin-bottom</span>: <span class="wzw-tk-num">0.75rem</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.product-card__title {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#f8fafc</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">1.25rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 700;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">margin</span>: 0 0 <span class="wzw-tk-num">0.5rem</span> 0;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.product-card__price {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#38bdf8</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">1.5rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 800;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">margin</span>: 0 0 <span class="wzw-tk-num">1.25rem</span> 0;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Modificadores do Bloco product-card */</span></span>
<span class="wzw-code-line">.product-card--featured {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-color</span>: <span class="wzw-tk-num">#00f0ff</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: linear-gradient(<span class="wzw-tk-num">145deg</span>, rgba(0, 240, 255, 0.08), <span class="wzw-tk-num">#1e293b</span>);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">box-shadow</span>: 0 <span class="wzw-tk-num">10px</span> <span class="wzw-tk-num">25px</span> rgba(0, 240, 255, 0.15);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.product-card__badge--glow {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#00f0ff</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#090d16</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">/* ==========================================================</span>
<span class="wzw-code-line">   BLOCO 2: .btn (Bloco Autônomo e Reutilizável)</span>
<span class="wzw-code-line">   ========================================================== */</span>
<span class="wzw-code-line">.btn {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: inline-flex;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">align-items</span>: center;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">justify-content</span>: center;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">0.75rem</span> <span class="wzw-tk-num">1.25rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-family</span>: inherit;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-size</span>: <span class="wzw-tk-num">0.95rem</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">font-weight</span>: 700;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">8px</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">border</span>: none;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">cursor</span>: pointer;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">transition</span>: all <span class="wzw-tk-num">0.2s</span> ease;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">text-decoration</span>: none;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Modificadores do Bloco btn */</span></span>
<span class="wzw-code-line">.btn--primary {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#00f0ff</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#090d16</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.btn--primary<span class="wzw-tk-kw">:hover</span> {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">filter</span>: brightness(1.15);</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">box-shadow</span>: 0 0 <span class="wzw-tk-num">15px</span> rgba(0, 240, 255, 0.4);</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.btn--secondary {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#334155</span>;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#f8fafc</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.btn--secondary<span class="wzw-tk-kw">:hover</span> {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">background</span>: <span class="wzw-tk-num">#475569</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.btn--pulse {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">animation</span>: pulse-action <span class="wzw-tk-num">2s</span> infinite;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@keyframes</span> pulse-action {</span>
<span class="wzw-code-line">  0%, 100% { transform: scale(1); }</span>
<span class="wzw-code-line">  50% { transform: scale(1.02); }</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Grid Organizador de Demonstração */</span></span>
<span class="wzw-code-line">.catalog-grid {</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">display</span>: grid;</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">grid-template-columns</span>: repeat(auto-fit, minmax(<span class="wzw-tk-num">240px</span>, <span class="wzw-tk-num">1fr</span>));</span>
<span class="wzw-code-line">  <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">1.5rem</span>;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* ==========================================================
   BLOCO 1: .product-card
   ========================================================== */
.product-card {
  display: flex;
  flex-direction: column;
  background: #1e293b;
  border: 1px solid #334155;
  border-radius: 12px;
  padding: 1.5rem;
  transition: transform 0.2s ease, border-color 0.2s ease;
}

.product-card:hover {
  transform: translateY(-4px);
  border-color: #475569;
}

/* Elementos do Bloco product-card */
.product-card__badge {
  align-self: flex-start;
  background: #334155;
  color: #f8fafc;
  font-size: 0.75rem;
  font-weight: 700;
  padding: 3px 10px;
  border-radius: 20px;
  margin-bottom: 0.75rem;
}

.product-card__title {
  color: #f8fafc;
  font-size: 1.25rem;
  font-weight: 700;
  margin: 0 0 0.5rem 0;
}

.product-card__price {
  color: #38bdf8;
  font-size: 1.5rem;
  font-weight: 800;
  margin: 0 0 1.25rem 0;
}

/* Modificadores do Bloco product-card */
.product-card--featured {
  border-color: #00f0ff;
  background: linear-gradient(145deg, rgba(0, 240, 255, 0.08), #1e293b);
  box-shadow: 0 10px 25px rgba(0, 240, 255, 0.15);
}

.product-card__badge--glow {
  background: #00f0ff;
  color: #090d16;
}

/* ==========================================================
   BLOCO 2: .btn (Bloco Autônomo e Reutilizável)
   ========================================================== */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0.75rem 1.25rem;
  font-family: inherit;
  font-size: 0.95rem;
  font-weight: 700;
  border-radius: 8px;
  border: none;
  cursor: pointer;
  transition: all 0.2s ease;
  text-decoration: none;
}

/* Modificadores do Bloco btn */
.btn--primary {
  background: #00f0ff;
  color: #090d16;
}

.btn--primary:hover {
  filter: brightness(1.15);
  box-shadow: 0 0 15px rgba(0, 240, 255, 0.4);
}

.btn--secondary {
  background: #334155;
  color: #f8fafc;
}

.btn--secondary:hover {
  background: #475569;
}

.btn--pulse {
  animation: pulse-action 2s infinite;
}

@keyframes pulse-action {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.02); }
}

/* Grid Organizador de Demonstração */
.catalog-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 1.5rem;
}</textarea>
        </div>
    </div>
    
<div class="wzw-playground-action-bar">
    <span class="wzw-playground-desc">🧪 <strong>Quer ver este código funcionando agora?</strong></span><br />
    <a href="https://webzoneware.com/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener"><br />
        Abrir no Playground IDE &rarr;<br />
    </a>
</div>
<h2>5. Ferramentas Web-ZoneWare para o seu Fluxo de Trabalho</h2>
<p>
    Ao adotar BEM em seus projetos, mantenha a legibilidade e a qualidade do código com as ferramentas oficiais da suíte Web-ZoneWare:
</p>
<ul>
<li><a href="https://webzoneware.com/web-ferramentas/css-beautify-minify/" target="_blank">Limpador e Formatador CSS</a>: Padronize a indentação das classes BEM e agrupe elementos com organização visual sênior.</li>
<li><a href="https://webzoneware.com/web-ferramentas/cssvalidate/" target="_blank">Validador de CSS Online</a>: Assegure que seletores e valores de propriedades estejam 100% de acordo com as normas da W3C.</li>
<li><a href="https://webzoneware.com/web-academy/playground-web/" target="_blank">Playground Web IDE</a>: Ambiente online para testar a combinação de blocos e modificadores BEM em tempo real.</li>
</ul>
<h2>6. Links Oficiais de Autoridade</h2>
<ul>
<li><a href="https://getbem.com/" target="_blank" rel="noopener noreferrer">Get BEM — Guia Oficial da Metodologia BEM</a></li>
<li><a href="https://developer.mozilla.org/pt-BR/docs/Learn/CSS/Building_blocks/Organizing" target="_blank" rel="noopener noreferrer">MDN Web Docs — Organizando o seu CSS</a></li>
<li><a href="https://css-tricks.com/bem-101/" target="_blank" rel="noopener noreferrer">CSS-Tricks — BEM 101: Arquitetura e Exemplos Práticos</a></li>
<li><a href="https://web.dev/learn/css/organizing" target="_blank" rel="noopener noreferrer">Google web.dev — Organização e Arquitetura de CSS</a></li>
</ul>
<h2>7. Exercício Prático da Lição 48</h2>
<ol>
<li>Abra o <strong>Playground Web IDE</strong> clicando no botão de ação da lição.</li>
<li>Crie um componente de Alerta de Notificação seguindo o padrão BEM: Bloco <code>.alert</code>, Elemento <code>.alert__text</code> e Elemento <code>.alert__close-btn</code>.</li>
<li>Crie três modificadores de status: <code>.alert--success</code> (fundo verde), <code>.alert--warning</code> (fundo amarelo) e <code>.alert--danger</code> (fundo vermelho).</li>
<li>Certifique-se de que nenhum seletor CSS utilize aninhamento profundo ou IDs, mantendo a especificidade plana de classe única.</li>
<li>Passe sua folha de estilos pelo <a href="https://webzoneware.com/web-ferramentas/css-beautify-minify/" target="_blank">Limpador e Formatador CSS</a> para garantir indentação impecável.</li>
</ol>
<h2>8. Quiz de Fixação Interativo</h2>
<details class="wzw-quiz-card">
<summary><strong>1. O que representam os sublinhados duplos (__) e os hifens duplos (&#8211;) na convenção BEM?</strong></summary>
<div class="wzw-quiz-answer">
<p><strong>Resposta Correta:</strong> Os sublinhados duplos (<code>__</code>) indicam um <strong>Elemento</strong> que pertence ao Bloco (ex: <code>.card__title</code>). Os hifens duplos (<code>--</code>) indicam um <strong>Modificador</strong> de estado ou aparência (ex: <code>.card--featured</code>).</p>
</p></div>
</details>
<details class="wzw-quiz-card">
<summary><strong>2. Por que o seletor .card__header__title__link é considerado uma má prática no BEM?</strong></summary>
<div class="wzw-quiz-answer">
<p><strong>Resposta Correta:</strong> Porque cria um acoplamento desnecessário à estrutura do DOM (conhecido como &#8220;Grandchildren Trap&#8221;). No BEM, os elementos devem pertencer sempre ao Bloco raiz (<code>.card__link</code> ou <code>.card__title-link</code>), sem encadear múltiplos <code>__</code> em série.</p>
</p></div>
</details>
<details class="wzw-quiz-card">
<summary><strong>3. Qual é o principal benefício da especificidade plana alcançada pelo BEM?</strong></summary>
<div class="wzw-quiz-answer">
<p><strong>Resposta Correta:</strong> Como quase todas as regras utilizam seletores de classe única <code>(0, 1, 0)</code>, não há &#8220;guerras de especificidade&#8221; na cascata. Qualquer modificador ou variação pode ser aplicado sem quebrar o layout e sem recorrer ao <code>!important</code>.</p>
</p></div>
</details>
<p><!-- Marcação Estruturada Schema.org (JSON-LD) --><br />
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "Metodologia BEM & Arquitetura de CSS Escalável",
  "description": "Aprenda a metodologia BEM (Bloco, Elemento, Modificador) para organizar seu CSS sem conflitos de cascata e especificidade.",
  "url": "https://webzoneware.com/web-academy/css/metodologia-bem-arquitetura-css/",
  "inLanguage": "pt-BR",
  "isPartOf": {
    "@type": "Course",
    "name": "Curso de CSS & CSS3 Completo",
    "url": "https://webzoneware.com/web-academy/css/",
    "provider": {
      "@type": "Organization",
      "name": "Web-ZoneWare",
      "url": "https://webzoneware.com"
    }
  },
  "proficiencyLevel": "Intermediate",
  "author": {
    "@type": "Organization",
    "name": "Web-ZoneWare Academy"
  }
}
</script></p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-css/metodologia-bem-arquitetura-css/">Metodologia BEM e Arquitetura de CSS | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-academy/curso-css/metodologia-bem-arquitetura-css/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Novos Elementos de Formulário no HTML5 &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-html/novos-elementos-formulario-html5/</link>
					<comments>https://webzoneware.com/web-academy/curso-html/novos-elementos-formulario-html5/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Wed, 21 Oct 2026 03:12:58 +0000</pubDate>
				<category><![CDATA[Curso de HTML & HTML5]]></category>
		<category><![CDATA[formularios modernos html5]]></category>
		<category><![CDATA[novos elementos de formulario html5]]></category>
		<category><![CDATA[progress vs meter html5]]></category>
		<category><![CDATA[tag datalist html5]]></category>
		<category><![CDATA[tag output html5]]></category>
		<category><![CDATA[web academy]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29326</guid>

					<description><![CDATA[<p>Além de revolucionar os campos de entrada com novos tipos de &#60;input&#62;, o HTML5 introduziu uma nova geração de elementos semânticos de suporte e exibição de dados para formulários. Componentes interativos que no passado exigiam dezenas de kilobytes de bibliotecas externas de JavaScript — como sugestões preditivas de autocompletar (autocomplete), mostradores dinâmicos de cálculos matemáticos, [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/novos-elementos-formulario-html5/">Novos Elementos de Formulário no HTML5 | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">Além de revolucionar os campos de entrada com novos tipos de <code>&lt;input&gt;</code>, o HTML5 introduziu uma nova geração de <strong>elementos semânticos de suporte e exibição de dados para formulários</strong>. Componentes interativos que no passado exigiam dezenas de kilobytes de bibliotecas externas de JavaScript — como sugestões preditivas de autocompletar (autocomplete), mostradores dinâmicos de cálculos matemáticos, barras de progresso de upload e medidores escalares de capacidade — contam agora com suporte nativo através das tags <code>&lt;datalist&gt;</code>, <code>&lt;output&gt;</code>, <code>&lt;progress&gt;</code> e <code>&lt;meter&gt;</code>.</p>
<h2>1. O Elemento &lt;datalist&gt;: Autocompletar Nativo sem JavaScript</h2>
<p>O elemento <code>&lt;datalist&gt;</code> fornece uma lista suspensa de opções pré-definidas para um campo <code>&lt;input&gt;</code> convencional. A vinculação é estabelecida através do atributo <strong><code>list</code></strong> no input, apontando para o <strong><code>id</code></strong> do <code>&lt;datalist&gt;</code>:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Campo de Busca com Autocomplete Nativo</span><br />
        <span>datalist-exemplo.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-18466" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">11 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-18466', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-18466', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;navegador&quot;</span><span class="wzw-tk-tag">&gt;</span>Escolha seu navegador preferido:<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;text&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;navegador&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;navegador&quot;</span> <span class="wzw-tk-attr">list</span>=<span class="wzw-tk-str">&quot;lista-navegadores&quot;</span> <span class="wzw-tk-attr">placeholder</span>=<span class="wzw-tk-str">&quot;Digite para buscar...&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;datalist</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;lista-navegadores&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;option</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;Google Chrome&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;option</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;Mozilla Firefox&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;option</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;Apple Safari&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;option</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;Microsoft Edge&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;option</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;Brave Browser&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;option</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;Opera&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/datalist&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;label for=&quot;navegador&quot;&gt;Escolha seu navegador preferido:&lt;/label&gt;
&lt;input type=&quot;text&quot; id=&quot;navegador&quot; name=&quot;navegador&quot; list=&quot;lista-navegadores&quot; placeholder=&quot;Digite para buscar...&quot;&gt;

&lt;datalist id=&quot;lista-navegadores&quot;&gt;
    &lt;option value=&quot;Google Chrome&quot;&gt;
    &lt;option value=&quot;Mozilla Firefox&quot;&gt;
    &lt;option value=&quot;Apple Safari&quot;&gt;
    &lt;option value=&quot;Microsoft Edge&quot;&gt;
    &lt;option value=&quot;Brave Browser&quot;&gt;
    &lt;option value=&quot;Opera&quot;&gt;
&lt;/datalist&gt;</textarea>
        </div>
    </div>
    
</div>
<div class="wzw-callout wzw-callout-info">
    <span class="wzw-callout-icon">💡</span></p>
<div class="wzw-callout-text">
        <strong>A Diferença Crucial entre &lt;select&gt; e &lt;datalist&gt;:</strong><br />
        <br />• No <code>&lt;select&gt;</code>, o usuário fica restrito estritamente às opções listadas; ele não pode digitar nada além do que está cadastrado.<br />
        <br />• No <code>&lt;datalist&gt;</code>, o usuário é totalmente livre para digitar um valor inédito ou selecionar uma das sugestões que se filtram automaticamente conforme ele digita.
    </div>
</div>
<h2>2. O Elemento &lt;output&gt;: Exibição de Resultados em Tempo Real</h2>
<p>O elemento <code>&lt;output&gt;</code> representa semanticamente o <strong>resultado de um cálculo</strong> ou a resposta de uma interação do usuário dentro de um formulário. Ele aceita o atributo <code>for</code> (que lista os IDs dos inputs utilizados no cálculo) e se integra ao evento nativo <code>oninput</code> do formulário sem exigir frameworks:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Simulador com Cálculo em Tempo Real via output</span><br />
        <span>calculadora-output.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-57317" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">10 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-57317', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-57317', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;form</span> <span class="wzw-tk-attr">oninput</span>=<span class="wzw-tk-str">&quot;resultado.value = parseInt(valor.value) * parseInt(quantidade.value)&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;valor&quot;</span><span class="wzw-tk-tag">&gt;</span>Preço Unitário (R$):<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;number&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;valor&quot;</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;50&quot;</span> <span class="wzw-tk-attr">min</span>=<span class="wzw-tk-str">&quot;1&quot;</span><span class="wzw-tk-tag">&gt;</span> &amp;times;</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;quantidade&quot;</span><span class="wzw-tk-tag">&gt;</span>Quantidade:<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;number&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;quantidade&quot;</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;3&quot;</span> <span class="wzw-tk-attr">min</span>=<span class="wzw-tk-str">&quot;1&quot;</span><span class="wzw-tk-tag">&gt;</span> =</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;strong&gt;</span>Total R$: <span class="wzw-tk-tag">&lt;/strong&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;output</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;resultado&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;resultado&quot;</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;valor quantidade&quot;</span><span class="wzw-tk-tag">&gt;</span>150<span class="wzw-tk-tag">&lt;/output&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/form&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;form oninput=&quot;resultado.value = parseInt(valor.value) * parseInt(quantidade.value)&quot;&gt;
    &lt;label for=&quot;valor&quot;&gt;Preço Unitário (R$):&lt;/label&gt;
    &lt;input type=&quot;number&quot; id=&quot;valor&quot; value=&quot;50&quot; min=&quot;1&quot;&gt; &amp;times;

    &lt;label for=&quot;quantidade&quot;&gt;Quantidade:&lt;/label&gt;
    &lt;input type=&quot;number&quot; id=&quot;quantidade&quot; value=&quot;3&quot; min=&quot;1&quot;&gt; =

    &lt;strong&gt;Total R$: &lt;/strong&gt;
    &lt;output id=&quot;resultado&quot; name=&quot;resultado&quot; for=&quot;valor quantidade&quot;&gt;150&lt;/output&gt;
&lt;/form&gt;</textarea>
        </div>
    </div>
    
</div>
<h2>3. O Elemento &lt;progress&gt;: Acompanhamento de Tarefas</h2>
<p>O elemento <code>&lt;progress&gt;</code> serve para representar visualmente a <strong>conclusão de uma tarefa em andamento</strong> que possui um término previsto (como o percentual de um upload de arquivo, uma instalação ou as etapas de um assistente cadastral):</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Barras de Progresso Determinadas e Indeterminadas</span><br />
        <span>progress-exemplo.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-77149" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">7 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-77149', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-77149', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- 1. Progresso Determinado (70% concluído) --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;progresso-upload&quot;</span><span class="wzw-tk-tag">&gt;</span>Enviando arquivo:<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;progress</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;progresso-upload&quot;</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;70&quot;</span> <span class="wzw-tk-attr">max</span>=<span class="wzw-tk-str">&quot;100&quot;</span><span class="wzw-tk-tag">&gt;</span>70%<span class="wzw-tk-tag">&lt;/progress&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- 2. Progresso Indeterminado (sem atributo value - animação de carregamento) --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;processamento&quot;</span><span class="wzw-tk-tag">&gt;</span>Aguardando resposta do servidor:<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;progress</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;processamento&quot;</span><span class="wzw-tk-tag">&gt;</span>Carregando...<span class="wzw-tk-tag">&lt;/progress&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!-- 1. Progresso Determinado (70% concluído) --&gt;
&lt;label for=&quot;progresso-upload&quot;&gt;Enviando arquivo:&lt;/label&gt;
&lt;progress id=&quot;progresso-upload&quot; value=&quot;70&quot; max=&quot;100&quot;&gt;70%&lt;/progress&gt;

&lt;!-- 2. Progresso Indeterminado (sem atributo value - animação de carregamento) --&gt;
&lt;label for=&quot;processamento&quot;&gt;Aguardando resposta do servidor:&lt;/label&gt;
&lt;progress id=&quot;processamento&quot;&gt;Carregando...&lt;/progress&gt;</textarea>
        </div>
    </div>
    
</div>
<h2>4. O Elemento &lt;meter&gt;: Medição Escalar e Faixas Críticas</h2>
<p>Ao contrário do <code>&lt;progress&gt;</code>, o elemento <code>&lt;meter&gt;</code> <strong>não representa uma tarefa em progresso</strong>, mas sim um <strong>valor escalar estático</strong> dentro de uma faixa conhecida, ou um valor fracionário (como uso de espaço em disco, porcentagem de bateria, força de uma senha ou pontuação em uma prova).</p>
<p>O recurso mais poderoso do <code>&lt;meter&gt;</code> é a capacidade de colorir automaticamente o indicador (Verde, Amarelo ou Vermelho) de acordo com limites definidos pelos atributos <code>low</code>, <code>high</code> e <code>optimum</code>:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Medidor de Capacidade com Alertas Coloridos Nativos</span><br />
        <span>meter-exemplo.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-67006" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">11 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-67006', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-67006', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- Exemplo: Uso de Armazenamento do Servidor --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;disco&quot;</span><span class="wzw-tk-tag">&gt;</span>Espaço em Disco Utilizado (8.5 GB de 10 GB):<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">&lt;meter id=&quot;disco&quot; </span>
<span class="wzw-code-line">       value=&quot;8.5&quot; </span>
<span class="wzw-code-line">       min=&quot;0&quot; </span>
<span class="wzw-code-line">       max=&quot;10&quot; </span>
<span class="wzw-code-line">       low=&quot;5&quot; </span>
<span class="wzw-code-line">       high=&quot;8&quot; </span>
<span class="wzw-code-line">       optimum=&quot;3&quot;&gt;</span>
<span class="wzw-code-line">    85%</span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/meter&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!-- Exemplo: Uso de Armazenamento do Servidor --&gt;
&lt;label for=&quot;disco&quot;&gt;Espaço em Disco Utilizado (8.5 GB de 10 GB):&lt;/label&gt;
&lt;meter id=&quot;disco&quot; 
       value=&quot;8.5&quot; 
       min=&quot;0&quot; 
       max=&quot;10&quot; 
       low=&quot;5&quot; 
       high=&quot;8&quot; 
       optimum=&quot;3&quot;&gt;
    85%
&lt;/meter&gt;</textarea>
        </div>
    </div>
    
</div>
<p>No exemplo acima, como o valor ideal (<code>optimum="3"</code>) é baixo e o valor atual (8.5) ultrapassou o limite superior (<code>high="8"</code>), o navegador renderiza o medidor em <strong>vermelho de alerta</strong> automaticamente.</p>
<h2>5. Tabela Comparativa: &lt;progress&gt; vs &lt;meter&gt;</h2>
<p>Utilize a tabela a seguir para nunca mais confundir os dois componentes visuais:</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th>Critério</th>
<th>Elemento &lt;progress&gt;</th>
<th>Elemento &lt;meter&gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Conceito Central</strong></td>
<td>Uma <strong>ação/tarefa dinâmica</strong> em andamento em direção a 100%.</td>
<td>Uma <strong>medição estática</strong> de capacidade, cota ou nível.</td>
</tr>
<tr>
<td><strong>Exemplo Típico</strong></td>
<td>Download de arquivo, etapas de checkout (1 de 4).</td>
<td>Uso de memória RAM, nível de bateria, nota de avaliação.</td>
</tr>
<tr>
<td><strong>Atributos Especiais</strong></td>
<td>Apenas <code>value</code> e <code>max</code>.</td>
<td><code>min</code>, <code>max</code>, <code>low</code>, <code>high</code> e <code>optimum</code>.</td>
</tr>
<tr>
<td><strong>Estado Indeterminado?</strong></td>
<td>Sim (ao omitir o atributo <code>value</code>).</td>
<td>Não (sempre exige um valor numérico válido).</td>
</tr>
</tbody>
</table>
</div>
<h2>6. Exemplo Prático: Painel Interativo no Playground IDE</h2>
<p>O exemplo abaixo constrói um simulador financeiro combinando <code>&lt;datalist&gt;</code>, <code>&lt;output&gt;</code> reativo e indicadores de cota com <code>&lt;meter&gt;</code>:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 + CSS3 — Simulador Completo com Novos Elementos de Formulário</span><br />
        <span>painel-financeiro.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-82518" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">119 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-82518', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-82518', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;!DOCTYPE</span><span class="wzw-tk-kw"> html</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;html</span> <span class="wzw-tk-attr">lang</span>=<span class="wzw-tk-str">&quot;pt-BR&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;head&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;meta</span> <span class="wzw-tk-attr">charset</span>=<span class="wzw-tk-str">&quot;UTF-8&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;meta</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;viewport&quot;</span> <span class="wzw-tk-attr">content</span>=<span class="wzw-tk-str">&quot;width=device-width, initial-scale=1.0&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;title&gt;</span>Painel Interativo de Crédito Web Academy<span class="wzw-tk-tag">&lt;/title&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;style&gt;</span></span>
<span class="wzw-code-line">        body {</span>
<span class="wzw-code-line">            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;</span>
<span class="wzw-code-line">            background: #0f172a;</span>
<span class="wzw-code-line">            color: #f8fafc;</span>
<span class="wzw-code-line">            padding: 30px;</span>
<span class="wzw-code-line">            margin: 0;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .card-painel {</span>
<span class="wzw-code-line">            max-width: 600px;</span>
<span class="wzw-code-line">            margin: 0 auto;</span>
<span class="wzw-code-line">            background: #1e293b;</span>
<span class="wzw-code-line">            border: 1px solid #334155;</span>
<span class="wzw-code-line">            border-radius: 16px;</span>
<span class="wzw-code-line">            padding: 32px;</span>
<span class="wzw-code-line">            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .campo {</span>
<span class="wzw-code-line">            margin-bottom: 22px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        label {</span>
<span class="wzw-code-line">            display: block;</span>
<span class="wzw-code-line">            font-size: 13px;</span>
<span class="wzw-code-line">            font-weight: 700;</span>
<span class="wzw-code-line">            color: #94a3b8;</span>
<span class="wzw-code-line">            margin-bottom: 8px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        input[type=&quot;text&quot;], input[type=&quot;range&quot;] {</span>
<span class="wzw-code-line">            width: 100%;</span>
<span class="wzw-code-line">            box-sizing: border-box;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        input[type=&quot;text&quot;] {</span>
<span class="wzw-code-line">            padding: 10px 14px;</span>
<span class="wzw-code-line">            background: #0b1120;</span>
<span class="wzw-code-line">            border: 1px solid #334155;</span>
<span class="wzw-code-line">            border-radius: 8px;</span>
<span class="wzw-code-line">            color: #f8fafc;</span>
<span class="wzw-code-line">            font-size: 14px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .resultado-destaque {</span>
<span class="wzw-code-line">            background: #0284c7;</span>
<span class="wzw-code-line">            padding: 16px;</span>
<span class="wzw-code-line">            border-radius: 10px;</span>
<span class="wzw-code-line">            text-align: center;</span>
<span class="wzw-code-line">            font-size: 18px;</span>
<span class="wzw-code-line">            margin-top: 10px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        output {</span>
<span class="wzw-code-line">            font-weight: 800;</span>
<span class="wzw-code-line">            font-size: 24px;</span>
<span class="wzw-code-line">            color: #ffffff;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        meter, progress {</span>
<span class="wzw-code-line">            width: 100%;</span>
<span class="wzw-code-line">            height: 18px;</span>
<span class="wzw-code-line">            border-radius: 8px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/style&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/head&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;body&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;main</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;card-painel&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;header&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;h2</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;margin-top:0; color:#38bdf8;&quot;</span><span class="wzw-tk-tag">&gt;</span>Simulador de Empréstimo Inteligente<span class="wzw-tk-tag">&lt;/h2&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color:#94a3b8; font-size:14px;&quot;</span><span class="wzw-tk-tag">&gt;</span>Demonstração das tags datalist, output e meter em sincronia:<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/header&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;form</span> <span class="wzw-tk-attr">oninput</span>=<span class="wzw-tk-str">&quot;parcela.value = (parseInt(valor.value) / parseInt(meses.value)).toFixed(2)&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-comment">&lt;!-- 1. Uso de Datalist --&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;campo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;finalidade&quot;</span><span class="wzw-tk-tag">&gt;</span>Finalidade do Recurso (com Autocomplete):<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;text&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;finalidade&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;finalidade&quot;</span> <span class="wzw-tk-attr">list</span>=<span class="wzw-tk-str">&quot;opcoes-finalidade&quot;</span> <span class="wzw-tk-attr">placeholder</span>=<span class="wzw-tk-str">&quot;Digite ou escolha da lista...&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;datalist</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;opcoes-finalidade&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;option</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;Expansão de Empresa&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;option</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;Reforma de Imóvel&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;option</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;Aquisição de Equipamentos&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;option</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;Capital de Giro&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;/datalist&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            <span class="wzw-tk-comment">&lt;!-- 2. Sliders e Output --&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;campo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;valor&quot;</span><span class="wzw-tk-tag">&gt;</span>Valor Desejado: R$ <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;display-valor&quot;</span><span class="wzw-tk-tag">&gt;</span>10000<span class="wzw-tk-tag">&lt;/span&gt;</span><span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;range&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;valor&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;valor&quot;</span> <span class="wzw-tk-attr">min</span>=<span class="wzw-tk-str">&quot;1000&quot;</span> <span class="wzw-tk-attr">max</span>=<span class="wzw-tk-str">&quot;50000&quot;</span> <span class="wzw-tk-attr">step</span>=<span class="wzw-tk-str">&quot;1000&quot;</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;10000&quot;</span> <span class="wzw-tk-attr">oninput</span>=<span class="wzw-tk-str">&quot;document.getElementById(&#039;display-valor&#039;).textContent = this.value&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;campo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;meses&quot;</span><span class="wzw-tk-tag">&gt;</span>Prazo em Meses: <span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;display-meses&quot;</span><span class="wzw-tk-tag">&gt;</span>12<span class="wzw-tk-tag">&lt;/span&gt;</span>x<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;range&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;meses&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;meses&quot;</span> <span class="wzw-tk-attr">min</span>=<span class="wzw-tk-str">&quot;6&quot;</span> <span class="wzw-tk-attr">max</span>=<span class="wzw-tk-str">&quot;48&quot;</span> <span class="wzw-tk-attr">step</span>=<span class="wzw-tk-str">&quot;6&quot;</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;12&quot;</span> <span class="wzw-tk-attr">oninput</span>=<span class="wzw-tk-str">&quot;document.getElementById(&#039;display-meses&#039;).textContent = this.value&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;resultado-destaque&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                Valor da Parcela Estimada: R$&amp;nbsp;<span class="wzw-tk-tag">&lt;output</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;parcela&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;parcela&quot;</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;valor meses&quot;</span><span class="wzw-tk-tag">&gt;</span>833.33<span class="wzw-tk-tag">&lt;/output&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            <span class="wzw-tk-comment">&lt;!-- 3. Uso de Meter --&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;campo&quot;</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;margin-top: 24px;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;risco&quot;</span><span class="wzw-tk-tag">&gt;</span>Comprometimento do Limite de Crédito:<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;meter</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;risco&quot;</span> <span class="wzw-tk-attr">value</span>=<span class="wzw-tk-str">&quot;45&quot;</span> <span class="wzw-tk-attr">min</span>=<span class="wzw-tk-str">&quot;0&quot;</span> <span class="wzw-tk-attr">max</span>=<span class="wzw-tk-str">&quot;100&quot;</span> <span class="wzw-tk-attr">low</span>=<span class="wzw-tk-str">&quot;30&quot;</span> <span class="wzw-tk-attr">high</span>=<span class="wzw-tk-str">&quot;70&quot;</span> <span class="wzw-tk-attr">optimum</span>=<span class="wzw-tk-str">&quot;20&quot;</span><span class="wzw-tk-tag">&gt;</span>45%<span class="wzw-tk-tag">&lt;/meter&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/form&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/main&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/body&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/html&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;pt-BR&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Painel Interativo de Crédito Web Academy&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;
            background: #0f172a;
            color: #f8fafc;
            padding: 30px;
            margin: 0;
        }

        .card-painel {
            max-width: 600px;
            margin: 0 auto;
            background: #1e293b;
            border: 1px solid #334155;
            border-radius: 16px;
            padding: 32px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
        }

        .campo {
            margin-bottom: 22px;
        }

        label {
            display: block;
            font-size: 13px;
            font-weight: 700;
            color: #94a3b8;
            margin-bottom: 8px;
        }

        input[type=&quot;text&quot;], input[type=&quot;range&quot;] {
            width: 100%;
            box-sizing: border-box;
        }

        input[type=&quot;text&quot;] {
            padding: 10px 14px;
            background: #0b1120;
            border: 1px solid #334155;
            border-radius: 8px;
            color: #f8fafc;
            font-size: 14px;
        }

        .resultado-destaque {
            background: #0284c7;
            padding: 16px;
            border-radius: 10px;
            text-align: center;
            font-size: 18px;
            margin-top: 10px;
        }

        output {
            font-weight: 800;
            font-size: 24px;
            color: #ffffff;
        }

        meter, progress {
            width: 100%;
            height: 18px;
            border-radius: 8px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;main class=&quot;card-painel&quot;&gt;
        &lt;header&gt;
            &lt;h2 style=&quot;margin-top:0; color:#38bdf8;&quot;&gt;Simulador de Empréstimo Inteligente&lt;/h2&gt;
            &lt;p style=&quot;color:#94a3b8; font-size:14px;&quot;&gt;Demonstração das tags datalist, output e meter em sincronia:&lt;/p&gt;
        &lt;/header&gt;

        &lt;form oninput=&quot;parcela.value = (parseInt(valor.value) / parseInt(meses.value)).toFixed(2)&quot;&gt;
            &lt;!-- 1. Uso de Datalist --&gt;
            &lt;div class=&quot;campo&quot;&gt;
                &lt;label for=&quot;finalidade&quot;&gt;Finalidade do Recurso (com Autocomplete):&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;finalidade&quot; name=&quot;finalidade&quot; list=&quot;opcoes-finalidade&quot; placeholder=&quot;Digite ou escolha da lista...&quot;&gt;
                &lt;datalist id=&quot;opcoes-finalidade&quot;&gt;
                    &lt;option value=&quot;Expansão de Empresa&quot;&gt;
                    &lt;option value=&quot;Reforma de Imóvel&quot;&gt;
                    &lt;option value=&quot;Aquisição de Equipamentos&quot;&gt;
                    &lt;option value=&quot;Capital de Giro&quot;&gt;
                &lt;/datalist&gt;
            &lt;/div&gt;

            &lt;!-- 2. Sliders e Output --&gt;
            &lt;div class=&quot;campo&quot;&gt;
                &lt;label for=&quot;valor&quot;&gt;Valor Desejado: R$ &lt;span id=&quot;display-valor&quot;&gt;10000&lt;/span&gt;&lt;/label&gt;
                &lt;input type=&quot;range&quot; id=&quot;valor&quot; name=&quot;valor&quot; min=&quot;1000&quot; max=&quot;50000&quot; step=&quot;1000&quot; value=&quot;10000&quot; oninput=&quot;document.getElementById(&#039;display-valor&#039;).textContent = this.value&quot;&gt;
            &lt;/div&gt;

            &lt;div class=&quot;campo&quot;&gt;
                &lt;label for=&quot;meses&quot;&gt;Prazo em Meses: &lt;span id=&quot;display-meses&quot;&gt;12&lt;/span&gt;x&lt;/label&gt;
                &lt;input type=&quot;range&quot; id=&quot;meses&quot; name=&quot;meses&quot; min=&quot;6&quot; max=&quot;48&quot; step=&quot;6&quot; value=&quot;12&quot; oninput=&quot;document.getElementById(&#039;display-meses&#039;).textContent = this.value&quot;&gt;
            &lt;/div&gt;

            &lt;div class=&quot;resultado-destaque&quot;&gt;
                Valor da Parcela Estimada: R$&amp;nbsp;&lt;output id=&quot;parcela&quot; name=&quot;parcela&quot; for=&quot;valor meses&quot;&gt;833.33&lt;/output&gt;
            &lt;/div&gt;

            &lt;!-- 3. Uso de Meter --&gt;
            &lt;div class=&quot;campo&quot; style=&quot;margin-top: 24px;&quot;&gt;
                &lt;label for=&quot;risco&quot;&gt;Comprometimento do Limite de Crédito:&lt;/label&gt;
                &lt;meter id=&quot;risco&quot; value=&quot;45&quot; min=&quot;0&quot; max=&quot;100&quot; low=&quot;30&quot; high=&quot;70&quot; optimum=&quot;20&quot;&gt;45%&lt;/meter&gt;
            &lt;/div&gt;
        &lt;/form&gt;
    &lt;/main&gt;

&lt;/body&gt;
&lt;/html&gt;</textarea>
        </div>
    </div>
    
<div class="wzw-playground-action-bar">
        <span class="wzw-playground-desc">Teste este simulador interativo com Datalist e Output no Playground:</span><br />
        <a href="/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener">⚡ Testar no Playground IDE</a>
    </div>
</div>
<h2>7. Boas Práticas e Acessibilidade</h2>
<ul>
<li><strong>Sempre Forneça Texto de Fallback Dentro das Tags:</strong> Dentro de <code>&lt;progress&gt;70%&lt;/progress&gt;</code> e <code>&lt;meter&gt;85%&lt;/meter&gt;</code>, escreva o percentual ou valor em texto bruto. Se o navegador do usuário for extremamente antigo ou for um sintetizador de voz sem suporte ao elemento, ele lerá o texto contido internamente.</li>
<li><strong>Associe Labels a Todos os Componentes:</strong> Tanto o <code>&lt;progress&gt;</code> quanto o <code>&lt;meter&gt;</code> e o <code>&lt;output&gt;</code> devem possuir seus próprios elementos <code>&lt;label for="..."&gt;</code> explicativos.</li>
<li><strong>Valide a Formatação Semântica:</strong> Para auditar se seus formulários possuem estrutura HTML5 rigorosa, utilize o <a href="/web-ferramentas/html-cleaner/" target="_blank" rel="noopener">HTML Cleaner &#038; Formatador</a> do Web-ZoneWare.</li>
</ul>
<div class="wzw-callout wzw-callout-pro">
    <span class="wzw-callout-icon">🚀</span></p>
<div class="wzw-callout-text">
        <strong>Próximo Passo Didático:</strong> Na <strong>Lição 33: Atributos de Validação de Form</strong>, exploraremos o arsenal nativo de validação do HTML5: <code>required</code>, <code>pattern</code> (expressões regulares no HTML), <code>min</code>, <code>max</code>, <code>step</code>, <code>maxlength</code>, <code>minlength</code> e como interceptar mensagens de erro personalizadas com a API de Constraint Validation.
    </div>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/novos-elementos-formulario-html5/">Novos Elementos de Formulário no HTML5 | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-academy/curso-html/novos-elementos-formulario-html5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Novos Tipos de Input no HTML5: Guia Completo &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-html/novos-tipos-de-input-html5/</link>
					<comments>https://webzoneware.com/web-academy/curso-html/novos-tipos-de-input-html5/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Wed, 21 Oct 2026 03:09:54 +0000</pubDate>
				<category><![CDATA[Curso de HTML & HTML5]]></category>
		<category><![CDATA[input email date html5]]></category>
		<category><![CDATA[inputmode mobile html5]]></category>
		<category><![CDATA[novos tipos de input html5]]></category>
		<category><![CDATA[tipos de campos html5]]></category>
		<category><![CDATA[validacao nativa formulario html]]></category>
		<category><![CDATA[web academy]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29324</guid>

					<description><![CDATA[<p>Antes do advento do HTML5, a coleta de dados na web era rudimentar: praticamente qualquer campo de formulário resumia-se ao genérico type="text" ou type="password". Se uma aplicação necessitava de um e-mail válido, de uma data de agendamento ou de um número de telefone, o desenvolvedor era obrigado a importar bibliotecas externas pesadas e criar scripts [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/novos-tipos-de-input-html5/">Novos Tipos de Input no HTML5: Guia Completo | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">Antes do advento do HTML5, a coleta de dados na web era rudimentar: praticamente qualquer campo de formulário resumia-se ao genérico <code>type="text"</code> ou <code>type="password"</code>. Se uma aplicação necessitava de um e-mail válido, de uma data de agendamento ou de um número de telefone, o desenvolvedor era obrigado a importar bibliotecas externas pesadas e criar scripts de validação complexos. O HTML5 revolucionou a experiência do usuário ao introduzir <strong>mais de 13 novos tipos semânticos de entrada para o elemento &lt;input&gt;</strong>. Além de validarem os dados nativamente no cliente, esses tipos instruem os navegadores de smartphones a <strong>abrir o teclado virtual mais adequado</strong>, reduzindo o atrito de digitação e aumentando as conversões.</p>
<h2>1. O Fim do Input Genérico: Por Que Usar Tipos Específicos?</h2>
<p>Utilizar o tipo correto de entrada não é apenas uma boa prática semântica; é uma exigência crítica de usabilidade móvel e acessibilidade:</p>
<ul>
<li><strong>Abertura de Teclados Especializados em Celulares:</strong> Ao tocar em um campo <code>type="email"</code>, o teclado do smartphone exibe imediatamente as teclas <code>@</code> e <code>.com</code>. Ao tocar em <code>type="tel"</code> ou <code>type="number"</code>, o teclado numérico de discagem é ativado sem exigir que o usuário alterne manualmente entre telas de letras e números.</li>
<li><strong>Validação Nativa sem JavaScript:</strong> O navegador impede o envio do formulário caso o dado digitado não coincida com o formato esperado (por exemplo, avisando: <em>&#8220;Por favor, inclua um &#8216;@&#8217; no endereço de e-mail&#8221;</em>).</li>
<li><strong>Controles Gráficos Integrados ao Sistema Operacional:</strong> Campos como <code>type="date"</code> e <code>type="color"</code> abrem calendários e paletas de cores nativas do iOS, Android e Windows sem a necessidade de plugins pesados.</li>
</ul>
<h2>2. Guia dos Principais Novos Tipos de Entrada</h2>
<p>Conheça os comportamentos, validações e teclados acionados por cada tipo de entrada do HTML5:</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th style="width: 170px;">Tipo de Entrada</th>
<th style="width: 200px;">Validação Nativa</th>
<th style="width: 220px;">Comportamento em Smartphones</th>
<th>Atributos Chave</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>type="email"</code></td>
<td>Exige formato de e-mail válido (usuário@domínio).</td>
<td>Abre teclado com as teclas <code>@</code> e <code>.</code> em destaque.</td>
<td><code>multiple</code> (permite vários e-mails separados por vírgula).</td>
</tr>
<tr>
<td><code>type="date"</code></td>
<td>Garante o formato ISO 8601 (<code>AAAA-MM-DD</code>).</td>
<td>Abre a roleta de calendário nativa do sistema móvel.</td>
<td><code>min</code>, <code>max</code> (bloqueia datas passadas ou futuras).</td>
</tr>
<tr>
<td><code>type="tel"</code></td>
<td>Sem regex rígido (aceita traços, parênteses e código de país).</td>
<td>Abre o teclado numérico de chamada telefônica.</td>
<td><code>pattern="[0-9]{2} [0-9]{5}-[0-9]{4}"</code>.</td>
</tr>
<tr>
<td><code>type="number"</code></td>
<td>Bloqueia a inserção de letras; valida valores numéricos.</td>
<td>Abre o teclado de dígitos com pontos e vírgulas.</td>
<td><code>min</code>, <code>max</code>, <code>step</code> (define o incremento).</td>
</tr>
<tr>
<td><code>type="url"</code></td>
<td>Exige protocolo completo (<code>https://</code> ou <code>http://</code>).</td>
<td>Abre teclado com atalhos de barra (<code>/</code>) e extensões (<code>.com</code>).</td>
<td><code>placeholder="https://exemplo.com"</code>.</td>
</tr>
<tr>
<td><code>type="color"</code></td>
<td>Retorna um código hexadecimal de 6 dígitos (<code>#RRGGBB</code>).</td>
<td>Abre o seletor visual nativo de cores (Colorpicker).</td>
<td><code>value="#0284c7"</code> (define a cor inicial).</td>
</tr>
<tr>
<td><code>type="range"</code></td>
<td>Retorna um valor dentro de um intervalo contínuo.</td>
<td>Exibe uma barra deslizante sensível ao toque (Slider).</td>
<td><code>min="0"</code>, <code>max="100"</code>, <code>step="5"</code>.</td>
</tr>
<tr>
<td><code>type="search"</code></td>
<td>Campo otimizado para consultas.</td>
<td>Exibe o botão de &#8220;Buscar&#8221; no teclado e um ícone &#8220;X&#8221; para limpar o campo.</td>
<td><code>autocomplete="on"</code>.</td>
</tr>
<tr>
<td><code>type="time"</code></td>
<td>Exige formato de horário (<code>HH:MM</code> de 24 horas).</td>
<td>Abre a roleta de seleção de horas e minutos.</td>
<td><code>min="08:00"</code>, <code>max="18:00"</code>.</td>
</tr>
</tbody>
</table>
</div>
<h2>3. O Atributo Especial inputmode: Ajuste Fino para Telas Sensíveis ao Toque</h2>
<p>Em alguns casos, usar <code>type="number"</code> pode ser inconveniente no desktop porque o navegador desenha setinhas de incremento (steppers) dentro do campo — algo indesejado para números de cartão de crédito, CEP ou CPF.</p>
<p>Para resolver isso, o HTML5 introduziu o atributo <strong><code>inputmode</code></strong>. Ele permite manter o campo como texto comum, mas forçar a abertura do teclado mobile desejado:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Uso de inputmode para Teclados Numéricos sem Setinhas</span><br />
        <span>inputmode-exemplo.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-85686" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">7 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-85686', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-85686', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- Campo de CEP: texto comum, mas abre teclado numérico no celular --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;cep&quot;</span><span class="wzw-tk-tag">&gt;</span>CEP de Entrega:<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;text&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;cep&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;cep&quot;</span> <span class="wzw-tk-attr">inputmode</span>=<span class="wzw-tk-str">&quot;numeric&quot;</span> <span class="wzw-tk-attr">maxlength</span>=<span class="wzw-tk-str">&quot;9&quot;</span> <span class="wzw-tk-attr">placeholder</span>=<span class="wzw-tk-str">&quot;00000-000&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- Campo de Código de Autenticação 2FA --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;token&quot;</span><span class="wzw-tk-tag">&gt;</span>Código de Segurança (6 dígitos):<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;text&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;token&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;token&quot;</span> <span class="wzw-tk-attr">inputmode</span>=<span class="wzw-tk-str">&quot;numeric&quot;</span> <span class="wzw-tk-attr">pattern</span>=<span class="wzw-tk-str">&quot;[0-9]{6}&quot;</span> <span class="wzw-tk-attr">autocomplete</span>=<span class="wzw-tk-str">&quot;one-time-code&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!-- Campo de CEP: texto comum, mas abre teclado numérico no celular --&gt;
&lt;label for=&quot;cep&quot;&gt;CEP de Entrega:&lt;/label&gt;
&lt;input type=&quot;text&quot; id=&quot;cep&quot; name=&quot;cep&quot; inputmode=&quot;numeric&quot; maxlength=&quot;9&quot; placeholder=&quot;00000-000&quot;&gt;

&lt;!-- Campo de Código de Autenticação 2FA --&gt;
&lt;label for=&quot;token&quot;&gt;Código de Segurança (6 dígitos):&lt;/label&gt;
&lt;input type=&quot;text&quot; id=&quot;token&quot; name=&quot;token&quot; inputmode=&quot;numeric&quot; pattern=&quot;[0-9]{6}&quot; autocomplete=&quot;one-time-code&quot;&gt;</textarea>
        </div>
    </div>
    
</div>
<h2>4. Estilizando Estados de Validação com Pseudo-Classes CSS</h2>
<p>Quando você utiliza os novos tipos de entrada e atributos como <code>required</code>, o CSS permite aplicar estilos visuais imediatos conforme o usuário digita:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>CSS3 — Feedback Visual Imediato com :valid e :invalid</span><br />
        <span>validacao-estilos.css</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-77488" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS</span>
                                <span class="wzw-ide-lines-count">10 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-77488', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-77488', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">/* Campo que foi preenchido de forma válida */</span></span>
<span class="wzw-code-line"><span class="wzw-tk-attr">input</span>:valid {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">border-color</span>: <span class="wzw-tk-num">#10b981</span>; /* Verde esmeralda */</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Campo que contém dados incorretos após a interação */</span></span>
<span class="wzw-code-line"><span class="wzw-tk-attr">input</span>:user-invalid {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">border-color</span>: <span class="wzw-tk-num">#ef4444</span>; /* Vermelho rubi */</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">background-color</span>: rgba(239, 68, 68, 0.05);</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* Campo que foi preenchido de forma válida */
input:valid {
    border-color: #10b981; /* Verde esmeralda */
}

/* Campo que contém dados incorretos após a interação */
input:user-invalid {
    border-color: #ef4444; /* Vermelho rubi */
    background-color: rgba(239, 68, 68, 0.05);
}</textarea>
        </div>
    </div>
    
</div>
<h2>5. Exemplo Prático: Formulário Moderno de Agendamento no Playground IDE</h2>
<p>O exemplo abaixo reúne múltiplos tipos de entrada do HTML5 em um formulário responsivo de agendamento de consultoria:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 + CSS3 — Formulário de Agendamento com Novos Tipos de Entrada</span><br />
        <span>formulario-agendamento.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-33829" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">126 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-33829', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-33829', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;!DOCTYPE</span><span class="wzw-tk-kw"> html</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;html</span> <span class="wzw-tk-attr">lang</span>=<span class="wzw-tk-str">&quot;pt-BR&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;head&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;meta</span> <span class="wzw-tk-attr">charset</span>=<span class="wzw-tk-str">&quot;UTF-8&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;meta</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;viewport&quot;</span> <span class="wzw-tk-attr">content</span>=<span class="wzw-tk-str">&quot;width=device-width, initial-scale=1.0&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;title&gt;</span>Agendamento com Novos Inputs HTML5<span class="wzw-tk-tag">&lt;/title&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;style&gt;</span></span>
<span class="wzw-code-line">        body {</span>
<span class="wzw-code-line">            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;</span>
<span class="wzw-code-line">            background: #0f172a;</span>
<span class="wzw-code-line">            color: #f8fafc;</span>
<span class="wzw-code-line">            padding: 30px;</span>
<span class="wzw-code-line">            margin: 0;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .card-form {</span>
<span class="wzw-code-line">            max-width: 580px;</span>
<span class="wzw-code-line">            margin: 0 auto;</span>
<span class="wzw-code-line">            background: #1e293b;</span>
<span class="wzw-code-line">            border: 1px solid #334155;</span>
<span class="wzw-code-line">            border-radius: 16px;</span>
<span class="wzw-code-line">            padding: 32px;</span>
<span class="wzw-code-line">            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .campo {</span>
<span class="wzw-code-line">            margin-bottom: 20px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        label {</span>
<span class="wzw-code-line">            display: block;</span>
<span class="wzw-code-line">            font-size: 13px;</span>
<span class="wzw-code-line">            font-weight: 700;</span>
<span class="wzw-code-line">            color: #94a3b8;</span>
<span class="wzw-code-line">            margin-bottom: 6px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        input[type=&quot;text&quot;],</span>
<span class="wzw-code-line">        input[type=&quot;email&quot;],</span>
<span class="wzw-code-line">        input[type=&quot;tel&quot;],</span>
<span class="wzw-code-line">        input[type=&quot;date&quot;],</span>
<span class="wzw-code-line">        input[type=&quot;time&quot;] {</span>
<span class="wzw-code-line">            width: 100%;</span>
<span class="wzw-code-line">            padding: 10px 14px;</span>
<span class="wzw-code-line">            background: #0b1120;</span>
<span class="wzw-code-line">            border: 1px solid #334155;</span>
<span class="wzw-code-line">            border-radius: 8px;</span>
<span class="wzw-code-line">            color: #f8fafc;</span>
<span class="wzw-code-line">            font-size: 14px;</span>
<span class="wzw-code-line">            box-sizing: border-box;</span>
<span class="wzw-code-line">            transition: border-color 0.15s ease;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        input:focus {</span>
<span class="wzw-code-line">            outline: none;</span>
<span class="wzw-code-line">            border-color: #38bdf8;</span>
<span class="wzw-code-line">            box-shadow: 0 0 0 3px rgba(56, 189, 248, 0.15);</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .linha-dupla {</span>
<span class="wzw-code-line">            display: grid;</span>
<span class="wzw-code-line">            grid-template-columns: 1fr 1fr;</span>
<span class="wzw-code-line">            gap: 16px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .btn-enviar {</span>
<span class="wzw-code-line">            width: 100%;</span>
<span class="wzw-code-line">            background: #0284c7;</span>
<span class="wzw-code-line">            color: white;</span>
<span class="wzw-code-line">            border: none;</span>
<span class="wzw-code-line">            padding: 12px;</span>
<span class="wzw-code-line">            border-radius: 8px;</span>
<span class="wzw-code-line">            font-size: 16px;</span>
<span class="wzw-code-line">            font-weight: 700;</span>
<span class="wzw-code-line">            cursor: pointer;</span>
<span class="wzw-code-line">            transition: all 0.2s ease;</span>
<span class="wzw-code-line">            margin-top: 10px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .btn-enviar:hover {</span>
<span class="wzw-code-line">            background: #0369a1;</span>
<span class="wzw-code-line">            box-shadow: 0 4px 15px rgba(2, 132, 199, 0.4);</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/style&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/head&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;body&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;main</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;card-form&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;header&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;h2</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;margin-top:0; color:#38bdf8;&quot;</span><span class="wzw-tk-tag">&gt;</span>Agendar Consultoria Web<span class="wzw-tk-tag">&lt;/h2&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color:#94a3b8; font-size:14px; margin-bottom:24px;&quot;</span><span class="wzw-tk-tag">&gt;</span>Preencha os dados com suporte aos validadores nativos do HTML5:<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/header&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;form</span> <span class="wzw-tk-attr">action</span>=<span class="wzw-tk-str">&quot;#&quot;</span> <span class="wzw-tk-attr">method</span>=<span class="wzw-tk-str">&quot;POST&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;campo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;nome&quot;</span><span class="wzw-tk-tag">&gt;</span>Nome Completo:<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;text&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;nome&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;nome&quot;</span> <span class="wzw-tk-attr">required</span> <span class="wzw-tk-attr">placeholder</span>=<span class="wzw-tk-str">&quot;Digite seu nome&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;campo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;email&quot;</span><span class="wzw-tk-tag">&gt;</span>E-mail Corporativo:<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;email&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;email&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;email&quot;</span> <span class="wzw-tk-attr">required</span> <span class="wzw-tk-attr">placeholder</span>=<span class="wzw-tk-str">&quot;seu@empresa.com&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;linha-dupla&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;campo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;data&quot;</span><span class="wzw-tk-tag">&gt;</span>Data Desejada:<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;date&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;data&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;data&quot;</span> <span class="wzw-tk-attr">required</span> <span class="wzw-tk-attr">min</span>=<span class="wzw-tk-str">&quot;2026-10-21&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;campo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;horario&quot;</span><span class="wzw-tk-tag">&gt;</span>Horário:<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;time&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;horario&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;horario&quot;</span> <span class="wzw-tk-attr">required</span> <span class="wzw-tk-attr">min</span>=<span class="wzw-tk-str">&quot;09:00&quot;</span> <span class="wzw-tk-attr">max</span>=<span class="wzw-tk-str">&quot;18:00&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;campo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;label</span> <span class="wzw-tk-attr">for</span>=<span class="wzw-tk-str">&quot;telefone&quot;</span><span class="wzw-tk-tag">&gt;</span>WhatsApp / Celular:<span class="wzw-tk-tag">&lt;/label&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;input</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;tel&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;telefone&quot;</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;telefone&quot;</span> <span class="wzw-tk-attr">inputmode</span>=<span class="wzw-tk-str">&quot;tel&quot;</span> <span class="wzw-tk-attr">placeholder</span>=<span class="wzw-tk-str">&quot;(11) 99999-9999&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;button</span> <span class="wzw-tk-attr">type</span>=<span class="wzw-tk-str">&quot;submit&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;btn-enviar&quot;</span><span class="wzw-tk-tag">&gt;</span>Confirmar Agendamento<span class="wzw-tk-tag">&lt;/button&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/form&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/main&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/body&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/html&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;pt-BR&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Agendamento com Novos Inputs HTML5&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;
            background: #0f172a;
            color: #f8fafc;
            padding: 30px;
            margin: 0;
        }

        .card-form {
            max-width: 580px;
            margin: 0 auto;
            background: #1e293b;
            border: 1px solid #334155;
            border-radius: 16px;
            padding: 32px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
        }

        .campo {
            margin-bottom: 20px;
        }

        label {
            display: block;
            font-size: 13px;
            font-weight: 700;
            color: #94a3b8;
            margin-bottom: 6px;
        }

        input[type=&quot;text&quot;],
        input[type=&quot;email&quot;],
        input[type=&quot;tel&quot;],
        input[type=&quot;date&quot;],
        input[type=&quot;time&quot;] {
            width: 100%;
            padding: 10px 14px;
            background: #0b1120;
            border: 1px solid #334155;
            border-radius: 8px;
            color: #f8fafc;
            font-size: 14px;
            box-sizing: border-box;
            transition: border-color 0.15s ease;
        }

        input:focus {
            outline: none;
            border-color: #38bdf8;
            box-shadow: 0 0 0 3px rgba(56, 189, 248, 0.15);
        }

        .linha-dupla {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 16px;
        }

        .btn-enviar {
            width: 100%;
            background: #0284c7;
            color: white;
            border: none;
            padding: 12px;
            border-radius: 8px;
            font-size: 16px;
            font-weight: 700;
            cursor: pointer;
            transition: all 0.2s ease;
            margin-top: 10px;
        }

        .btn-enviar:hover {
            background: #0369a1;
            box-shadow: 0 4px 15px rgba(2, 132, 199, 0.4);
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;main class=&quot;card-form&quot;&gt;
        &lt;header&gt;
            &lt;h2 style=&quot;margin-top:0; color:#38bdf8;&quot;&gt;Agendar Consultoria Web&lt;/h2&gt;
            &lt;p style=&quot;color:#94a3b8; font-size:14px; margin-bottom:24px;&quot;&gt;Preencha os dados com suporte aos validadores nativos do HTML5:&lt;/p&gt;
        &lt;/header&gt;

        &lt;form action=&quot;#&quot; method=&quot;POST&quot;&gt;
            &lt;div class=&quot;campo&quot;&gt;
                &lt;label for=&quot;nome&quot;&gt;Nome Completo:&lt;/label&gt;
                &lt;input type=&quot;text&quot; id=&quot;nome&quot; name=&quot;nome&quot; required placeholder=&quot;Digite seu nome&quot;&gt;
            &lt;/div&gt;

            &lt;div class=&quot;campo&quot;&gt;
                &lt;label for=&quot;email&quot;&gt;E-mail Corporativo:&lt;/label&gt;
                &lt;input type=&quot;email&quot; id=&quot;email&quot; name=&quot;email&quot; required placeholder=&quot;seu@empresa.com&quot;&gt;
            &lt;/div&gt;

            &lt;div class=&quot;linha-dupla&quot;&gt;
                &lt;div class=&quot;campo&quot;&gt;
                    &lt;label for=&quot;data&quot;&gt;Data Desejada:&lt;/label&gt;
                    &lt;input type=&quot;date&quot; id=&quot;data&quot; name=&quot;data&quot; required min=&quot;2026-10-21&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;campo&quot;&gt;
                    &lt;label for=&quot;horario&quot;&gt;Horário:&lt;/label&gt;
                    &lt;input type=&quot;time&quot; id=&quot;horario&quot; name=&quot;horario&quot; required min=&quot;09:00&quot; max=&quot;18:00&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;campo&quot;&gt;
                &lt;label for=&quot;telefone&quot;&gt;WhatsApp / Celular:&lt;/label&gt;
                &lt;input type=&quot;tel&quot; id=&quot;telefone&quot; name=&quot;telefone&quot; inputmode=&quot;tel&quot; placeholder=&quot;(11) 99999-9999&quot;&gt;
            &lt;/div&gt;

            &lt;button type=&quot;submit&quot; class=&quot;btn-enviar&quot;&gt;Confirmar Agendamento&lt;/button&gt;
        &lt;/form&gt;
    &lt;/main&gt;

&lt;/body&gt;
&lt;/html&gt;</textarea>
        </div>
    </div>
    
<div class="wzw-playground-action-bar">
        <span class="wzw-playground-desc">Teste este formulário interativo e experimente as validações nativas:</span><br />
        <a href="/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener">⚡ Testar no Playground IDE</a>
    </div>
</div>
<h2>6. Boas Práticas de Engenharia e Segurança</h2>
<ul>
<li><strong>Validação no Cliente Nunca Substitui o Backend:</strong> A validação nativa do HTML5 serve para proporcionar uma experiência fluida ao usuário. No entanto, usuários maliciosos podem desativá-la facilmente via DevTools ou enviar dados via cURL. Sempre valide e sanitize todos os dados novamente no servidor (PHP, Node.js, Python).</li>
<li><strong>Sempre Defina o Atributo name:</strong> Campos sem o atributo <code>name</code> não são incluídos no pacote de dados enviado na requisição HTTP.</li>
<li><strong>Formatadores de Código:</strong> Para manter a sintaxe de seus formulários limpa e sem tags mal-fechadas, utilize o <a href="/web-ferramentas/html-cleaner/" target="_blank" rel="noopener">HTML Cleaner &#038; Formatador</a> do Web-ZoneWare.</li>
</ul>
<div class="wzw-callout wzw-callout-pro">
    <span class="wzw-callout-icon">🚀</span></p>
<div class="wzw-callout-text">
        <strong>Próximo Passo Didático:</strong> Na <strong>Lição 32: Novos Elementos de Formulário</strong>, conheceremos as tags estruturais que acompanham os inputs: <code>&lt;datalist&gt;</code> (autocompletar nativo sem JavaScript), <code>&lt;output&gt;</code> para cálculos dinâmicos, <code>&lt;progress&gt;</code> para barras de carregamento e <code>&lt;meter&gt;</code> para indicadores de nível e capacidade.
    </div>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/novos-tipos-de-input-html5/">Novos Tipos de Input no HTML5: Guia Completo | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-academy/curso-html/novos-tipos-de-input-html5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Elementos Semânticos no HTML5: Header e Nav &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-html/elementos-semanticos-html5/</link>
					<comments>https://webzoneware.com/web-academy/curso-html/elementos-semanticos-html5/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Wed, 21 Oct 2026 03:05:57 +0000</pubDate>
				<category><![CDATA[Curso de HTML & HTML5]]></category>
		<category><![CDATA[aria-current page menu]]></category>
		<category><![CDATA[elementos semanticos html5 header nav]]></category>
		<category><![CDATA[menus acessiveis html5]]></category>
		<category><![CDATA[tag header html5]]></category>
		<category><![CDATA[tag nav acessibilidade]]></category>
		<category><![CDATA[web academy]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29322</guid>

					<description><![CDATA[<p>Em qualquer aplicação ou portal na internet, o cabeçalho e a barra de navegação são os primeiros componentes com os quais os usuários e os motores de busca interagem. No HTML5, os elementos semânticos &#60;header&#62; e &#60;nav&#62; vieram substituir os arcaicos &#60;div id="topo"&#62; e &#60;div class="menu"&#62;. Compreender a profundidade dessas duas tags — quando usá-las [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/elementos-semanticos-html5/">Elementos Semânticos no HTML5: Header e Nav | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">Em qualquer aplicação ou portal na internet, o <strong>cabeçalho</strong> e a <strong>barra de navegação</strong> são os primeiros componentes com os quais os usuários e os motores de busca interagem. No HTML5, os elementos semânticos <code>&lt;header&gt;</code> e <code>&lt;nav&gt;</code> vieram substituir os arcaicos <code>&lt;div id="topo"&gt;</code> e <code>&lt;div class="menu"&gt;</code>. Compreender a profundidade dessas duas tags — quando usá-las no escopo global versus escopo de artigo, como estruturar menus com listas acessíveis e como gerenciar páginas ativas com <code>aria-current="page"</code> — é fundamental para criar interfaces profissionais e acessíveis.</p>
<h2>1. O Elemento &lt;header&gt;: Escopo Global vs Escopo Seccional</h2>
<p>Um dos maiores equívocos de quem estuda HTML5 é acreditar que só pode existir um único <code>&lt;header&gt;</code> por documento. Na verdade, o elemento <code>&lt;header&gt;</code> representa um contêiner introdutório para o elemento pai mais próximo e pode ser utilizado em dois escopos distintos:</p>
<h3>1. Escopo Global do Site (Landmark Banner)</h3>
<p>Quando o <code>&lt;header&gt;</code> é posicionado como filho direto de <code>&lt;body&gt;</code> (sem estar contido dentro de um <code>&lt;article&gt;</code> ou <code>&lt;section&gt;</code>), ele representa o cabeçalho mestre de todo o portal. Os navegadores atribuem automaticamente a ele o marco de acessibilidade <code>role="banner"</code>:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Cabeçalho Global do Portal</span><br />
        <span>header-global.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-91451" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">10 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-91451', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-91451', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;body&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">&lt;!-- Cabeçalho Global do Site --&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;header</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;topo-site&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;/&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;logo&quot;</span><span class="wzw-tk-tag">&gt;</span>Web-ZoneWare<span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;nav</span> <span class="wzw-tk-attr">aria-label</span>=<span class="wzw-tk-str">&quot;Menu Principal&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-comment">&lt;!-- Links do Menu --&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/nav&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/header&gt;</span></span>
<span class="wzw-code-line">    ...</span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/body&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;body&gt;
    &lt;!-- Cabeçalho Global do Site --&gt;
    &lt;header class=&quot;topo-site&quot;&gt;
        &lt;a href=&quot;/&quot; class=&quot;logo&quot;&gt;Web-ZoneWare&lt;/a&gt;
        &lt;nav aria-label=&quot;Menu Principal&quot;&gt;
            &lt;!-- Links do Menu --&gt;
        &lt;/nav&gt;
    &lt;/header&gt;
    ...
&lt;/body&gt;</textarea>
        </div>
    </div>
    
</div>
<h3>2. Escopo de Artigo ou Seção</h3>
<p>Você pode (e deve) utilizar um <code>&lt;header&gt;</code> dentro de um <code>&lt;article&gt;</code> ou <code>&lt;section&gt;</code> para envolver o título do artigo, a foto do autor, a data de publicação (<code>&lt;time&gt;</code>) e a categoria. Nesse contexto, ele <strong>não</strong> é um banner global, mas sim o cabeçalho daquele conteúdo específico:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Cabeçalho Seccional de um Artigo</span><br />
        <span>header-artigo.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-46605" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">13 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-46605', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-46605', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;article&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;header</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;cabecalho-post&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;h1&gt;</span>Como Construir Menus Acessíveis no HTML5<span class="wzw-tk-tag">&lt;/h1&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;meta-dados&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;span&gt;</span>Por Flavio<span class="wzw-tk-tag">&lt;/span&gt;</span> &amp;bull; </span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;time</span> <span class="wzw-tk-attr">datetime</span>=<span class="wzw-tk-str">&quot;2026-10-21&quot;</span><span class="wzw-tk-tag">&gt;</span>21 de Outubro de 2026<span class="wzw-tk-tag">&lt;/time&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/header&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;section&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;p&gt;</span>Corpo do artigo...<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/section&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/article&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;article&gt;
    &lt;header class=&quot;cabecalho-post&quot;&gt;
        &lt;h1&gt;Como Construir Menus Acessíveis no HTML5&lt;/h1&gt;
        &lt;div class=&quot;meta-dados&quot;&gt;
            &lt;span&gt;Por Flavio&lt;/span&gt; &amp;bull; 
            &lt;time datetime=&quot;2026-10-21&quot;&gt;21 de Outubro de 2026&lt;/time&gt;
        &lt;/div&gt;
    &lt;/header&gt;

    &lt;section&gt;
        &lt;p&gt;Corpo do artigo...&lt;/p&gt;
    &lt;/section&gt;
&lt;/article&gt;</textarea>
        </div>
    </div>
    
</div>
<h2>2. O Elemento &lt;nav&gt;: O Que Deve e o Que NÃO Deve Estar Nele</h2>
<p>O elemento <code>&lt;nav&gt;</code> é reservado exclusivamente para <strong>seções principais de navegação</strong> que contêm blocos de hiperlinks vitais para o usuário:</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th style="width: 240px;">DEVE Estar Dentro de &lt;nav&gt; ✅</th>
<th>NÃO DEVE Estar Dentro de &lt;nav&gt; ❌</th>
</tr>
</thead>
<tbody>
<tr>
<td>Menu de navegação principal do topo do site.</td>
<td>Links secundários de termos de uso e privacidade (pertencem a <code>&lt;footer&gt;</code>).</td>
</tr>
<tr>
<td>Menu de categorias de produtos de um e-commerce.</td>
<td>Ícones e links para redes sociais (pertencem a <code>&lt;footer&gt;</code> ou <code>&lt;aside&gt;</code>).</td>
</tr>
<tr>
<td>Trilha de migalhas de pão (Breadcrumbs).</td>
<td>Grupos de botões de comando (como &#8220;Salvar&#8221;, &#8220;Excluir&#8221; ou &#8220;Imprimir&#8221;).</td>
</tr>
<tr>
<td>Paginação de artigos (1, 2, 3&#8230; Próximo).</td>
<td>Links esparsos soltos no meio de um parágrafo de texto normal.</td>
</tr>
<tr>
<td>Índice interno de sumário (Table of Contents).</td>
<td>Formulário de login de usuário (pertence a <code>&lt;form&gt;</code>).</td>
</tr>
</tbody>
</table>
</div>
<h2>3. Por Que Menus Devem Ser Listas (&lt;ul&gt;&lt;li&gt;)?</h2>
<p>Muitos iniciantes colocam links <code>&lt;a&gt;</code> soltos dentro de <code>&lt;nav&gt;</code>. Embora o CSS consiga estilizá-los, essa prática <strong>destrói a acessibilidade para pessoas cegas</strong>.</p>
<p>Quando você envolve os links em uma lista não-ordenada (<code>&lt;ul&gt;&lt;li&gt;</code>), o leitor de tela anuncia exatamente: <em>&#8220;Navegação, lista com 4 itens&#8221;</em>. O usuário cego sabe de antemão quantos links existem no menu e consegue saltar de item em item pelo teclado com facilidade.</p>
<div class="wzw-callout wzw-callout-info">
    <span class="wzw-callout-icon">💡</span></p>
<div class="wzw-callout-text">
        <strong>Estrutura Padrão Recomendada pela WCAG:</strong><br />
        <br /><code>&lt;nav aria-label="Menu Principal"&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="..."&gt;Item&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/nav&gt;</code>
    </div>
</div>
<h2>4. O Poder do Atributo aria-current=&#8221;page&#8221;</h2>
<p>No desenvolvimento antigo, para destacar visualmente a página em que o usuário estava navegando, criava-se uma classe como <code>class="ativo"</code> ou <code>class="current"</code>. O problema é que leitores de tela não entendem classes CSS visuais.</p>
<p>O W3C padronizou o atributo <strong><code>aria-current="page"</code></strong>. Ele informa ao software de acessibilidade: <em>&#8220;Este é o link da página atual em exibição&#8221;</em>, enquanto você pode estilizar o elemento no CSS com um seletor limpo e elegante:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>CSS3 — Estilizando o Link Ativo Sem Classes Redundantes</span><br />
        <span>nav-active.css</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-57441" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS</span>
                                <span class="wzw-ide-lines-count">6 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-57441', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-57441', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">/* Estilo do item ativo selecionado pelo atributo ARIA */</span></span>
<span class="wzw-code-line">nav.menu-topo a[aria-current=<span class="wzw-tk-str">&quot;page&quot;</span>] {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#38bdf8</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">border-bottom</span>: <span class="wzw-tk-num">2px</span> solid <span class="wzw-tk-num">#38bdf8</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">font-weight</span>: 700;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* Estilo do item ativo selecionado pelo atributo ARIA */
nav.menu-topo a[aria-current=&quot;page&quot;] {
    color: #38bdf8;
    border-bottom: 2px solid #38bdf8;
    font-weight: 700;
}</textarea>
        </div>
    </div>
    
</div>
<h2>5. Múltiplos &lt;nav&gt; na Mesma Página e o Uso Obrigatório de aria-label</h2>
<p>Se uma página possuir dois ou mais elementos <code>&lt;nav&gt;</code> (por exemplo, o menu do topo, a trilha de breadcrumbs e a paginação), o usuário de leitor de tela ouvirá repetidamente: <em>&#8220;Navegação&#8230; Navegação&#8230; Navegação&#8230;&#8221;</em> sem saber qual é qual.</p>
<p>Para resolver isso, <strong>sempre diferencie cada &lt;nav&gt; com o atributo <code>aria-label</code></strong>:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Diferenciando Múltiplas Navegações com aria-label</span><br />
        <span>multiplos-nav.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-60767" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">8 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-60767', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-60767', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- 1. Navegação Principal no Topo --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;nav</span> <span class="wzw-tk-attr">aria-label</span>=<span class="wzw-tk-str">&quot;Menu Principal&quot;</span><span class="wzw-tk-tag">&gt;</span>...<span class="wzw-tk-tag">&lt;/nav&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- 2. Trilha de Navegação (Breadcrumb) --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;nav</span> <span class="wzw-tk-attr">aria-label</span>=<span class="wzw-tk-str">&quot;Trilha de Navegação&quot;</span><span class="wzw-tk-tag">&gt;</span>...<span class="wzw-tk-tag">&lt;/nav&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- 3. Paginação no Rodapé da Lista --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;nav</span> <span class="wzw-tk-attr">aria-label</span>=<span class="wzw-tk-str">&quot;Paginação de Aulas&quot;</span><span class="wzw-tk-tag">&gt;</span>...<span class="wzw-tk-tag">&lt;/nav&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!-- 1. Navegação Principal no Topo --&gt;
&lt;nav aria-label=&quot;Menu Principal&quot;&gt;...&lt;/nav&gt;

&lt;!-- 2. Trilha de Navegação (Breadcrumb) --&gt;
&lt;nav aria-label=&quot;Trilha de Navegação&quot;&gt;...&lt;/nav&gt;

&lt;!-- 3. Paginação no Rodapé da Lista --&gt;
&lt;nav aria-label=&quot;Paginação de Aulas&quot;&gt;...&lt;/nav&gt;</textarea>
        </div>
    </div>
    
</div>
<h2>6. Exemplo Prático: Cabeçalho Moderno com Glassmorphism no Playground IDE</h2>
<p>O exemplo abaixo demonstra a montagem de um cabeçalho completo, responsivo e semântico, com efeito de vidro fosco (Glassmorphism), menu acessível e indicador <code>aria-current="page"</code>:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 + CSS3 — Cabeçalho Fixo Moderno e Acessível</span><br />
        <span>cabecalho-moderno.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-51531" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">133 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-51531', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-51531', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;!DOCTYPE</span><span class="wzw-tk-kw"> html</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;html</span> <span class="wzw-tk-attr">lang</span>=<span class="wzw-tk-str">&quot;pt-BR&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;head&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;meta</span> <span class="wzw-tk-attr">charset</span>=<span class="wzw-tk-str">&quot;UTF-8&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;meta</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;viewport&quot;</span> <span class="wzw-tk-attr">content</span>=<span class="wzw-tk-str">&quot;width=device-width, initial-scale=1.0&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;title&gt;</span>Cabeçalho Semântico Web Academy<span class="wzw-tk-tag">&lt;/title&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;style&gt;</span></span>
<span class="wzw-code-line">        body {</span>
<span class="wzw-code-line">            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;</span>
<span class="wzw-code-line">            background: #0f172a;</span>
<span class="wzw-code-line">            color: #f8fafc;</span>
<span class="wzw-code-line">            margin: 0;</span>
<span class="wzw-code-line">            padding-top: 80px; /* Compensa o header fixo */</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">/* Cabeçalho Sticky com Efeito Glassmorphism */</span></span>
<span class="wzw-code-line">        header.topo-fixo {</span>
<span class="wzw-code-line">            position: fixed;</span>
<span class="wzw-code-line">            top: 0;</span>
<span class="wzw-code-line">            left: 0;</span>
<span class="wzw-code-line">            right: 0;</span>
<span class="wzw-code-line">            height: 70px;</span>
<span class="wzw-code-line">            background: rgba(15, 23, 42, 0.75);</span>
<span class="wzw-code-line">            backdrop-filter: blur(12px);</span>
<span class="wzw-code-line">            -webkit-backdrop-filter: blur(12px);</span>
<span class="wzw-code-line">            border-bottom: 1px solid rgba(255, 255, 255, 0.1);</span>
<span class="wzw-code-line">            display: flex;</span>
<span class="wzw-code-line">            align-items: center;</span>
<span class="wzw-code-line">            justify-content: space-between;</span>
<span class="wzw-code-line">            padding: 0 32px;</span>
<span class="wzw-code-line">            z-index: 1000;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .logo-box a {</span>
<span class="wzw-code-line">            color: #f8fafc;</span>
<span class="wzw-code-line">            text-decoration: none;</span>
<span class="wzw-code-line">            font-size: 20px;</span>
<span class="wzw-code-line">            font-weight: 800;</span>
<span class="wzw-code-line">            display: flex;</span>
<span class="wzw-code-line">            align-items: center;</span>
<span class="wzw-code-line">            gap: 8px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .logo-box span {</span>
<span class="wzw-code-line">            color: #38bdf8;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">/* Navegação Semântica com Lista */</span></span>
<span class="wzw-code-line">        nav.nav-principal ul {</span>
<span class="wzw-code-line">            list-style: none;</span>
<span class="wzw-code-line">            margin: 0;</span>
<span class="wzw-code-line">            padding: 0;</span>
<span class="wzw-code-line">            display: flex;</span>
<span class="wzw-code-line">            gap: 24px;</span>
<span class="wzw-code-line">            align-items: center;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        nav.nav-principal a {</span>
<span class="wzw-code-line">            color: #94a3b8;</span>
<span class="wzw-code-line">            text-decoration: none;</span>
<span class="wzw-code-line">            font-size: 14px;</span>
<span class="wzw-code-line">            font-weight: 600;</span>
<span class="wzw-code-line">            padding: 8px 12px;</span>
<span class="wzw-code-line">            border-radius: 6px;</span>
<span class="wzw-code-line">            transition: all 0.2s ease;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        nav.nav-principal a:hover {</span>
<span class="wzw-code-line">            color: #ffffff;</span>
<span class="wzw-code-line">            background: rgba(255, 255, 255, 0.05);</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">/* Página Ativa selecionada via ARIA */</span></span>
<span class="wzw-code-line">        nav.nav-principal a[aria-current=&quot;page&quot;] {</span>
<span class="wzw-code-line">            color: #38bdf8;</span>
<span class="wzw-code-line">            background: rgba(56, 189, 248, 0.1);</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .btn-cta {</span>
<span class="wzw-code-line">            background: #0284c7;</span>
<span class="wzw-code-line">            color: #ffffff !important;</span>
<span class="wzw-code-line">            padding: 8px 18px !important;</span>
<span class="wzw-code-line">            border-radius: 8px !important;</span>
<span class="wzw-code-line">            font-weight: 700 !important;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .btn-cta:hover {</span>
<span class="wzw-code-line">            background: #0369a1 !important;</span>
<span class="wzw-code-line">            box-shadow: 0 4px 15px rgba(2, 132, 199, 0.4);</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .conteudo-demo {</span>
<span class="wzw-code-line">            max-width: 800px;</span>
<span class="wzw-code-line">            margin: 40px auto;</span>
<span class="wzw-code-line">            padding: 0 20px;</span>
<span class="wzw-code-line">            line-height: 1.7;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/style&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/head&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;body&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">&lt;!-- Cabeçalho Global (Landmark Banner) --&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;header</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;topo-fixo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;logo-box&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span><span class="wzw-tk-tag">&gt;</span>Web-Zone<span class="wzw-tk-tag">&lt;span&gt;</span>Ware<span class="wzw-tk-tag">&lt;/span&gt;</span><span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">&lt;!-- Navegação Primária Semântica --&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;nav</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;nav-principal&quot;</span> <span class="wzw-tk-attr">aria-label</span>=<span class="wzw-tk-str">&quot;Menu Principal&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;ul&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;li&gt;</span><span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span><span class="wzw-tk-tag">&gt;</span>Início<span class="wzw-tk-tag">&lt;/a&gt;</span><span class="wzw-tk-tag">&lt;/li&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;li&gt;</span><span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span> <span class="wzw-tk-attr">aria-current</span>=<span class="wzw-tk-str">&quot;page&quot;</span><span class="wzw-tk-tag">&gt;</span>Web Academy<span class="wzw-tk-tag">&lt;/a&gt;</span><span class="wzw-tk-tag">&lt;/li&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;li&gt;</span><span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span><span class="wzw-tk-tag">&gt;</span>Ferramentas<span class="wzw-tk-tag">&lt;/a&gt;</span><span class="wzw-tk-tag">&lt;/li&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;li&gt;</span><span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span><span class="wzw-tk-tag">&gt;</span>Comunidade<span class="wzw-tk-tag">&lt;/a&gt;</span><span class="wzw-tk-tag">&lt;/li&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;li&gt;</span><span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;btn-cta&quot;</span><span class="wzw-tk-tag">&gt;</span>Playground IDE<span class="wzw-tk-tag">&lt;/a&gt;</span><span class="wzw-tk-tag">&lt;/li&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/ul&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/nav&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/header&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;main</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;conteudo-demo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;article&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;header&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;h1</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color: #38bdf8; font-size: 32px;&quot;</span><span class="wzw-tk-tag">&gt;</span>Cabeçalhos e Navegação Semântica<span class="wzw-tk-tag">&lt;/h1&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color: #64748b;&quot;</span><span class="wzw-tk-tag">&gt;</span>Exemplo ao vivo da Lição 30 da Web Academy.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/header&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;section&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;p&gt;</span>Role a página para observar o efeito de vidro fosco (glassmorphism) do cabeçalho fixo no topo. A estrutura é 100% acessível a leitores de tela e cumpre todas as diretrizes da WCAG 2.2.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/section&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/article&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/main&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/body&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/html&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;pt-BR&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Cabeçalho Semântico Web Academy&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;
            background: #0f172a;
            color: #f8fafc;
            margin: 0;
            padding-top: 80px; /* Compensa o header fixo */
        }

        /* Cabeçalho Sticky com Efeito Glassmorphism */
        header.topo-fixo {
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            height: 70px;
            background: rgba(15, 23, 42, 0.75);
            backdrop-filter: blur(12px);
            -webkit-backdrop-filter: blur(12px);
            border-bottom: 1px solid rgba(255, 255, 255, 0.1);
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 0 32px;
            z-index: 1000;
        }

        .logo-box a {
            color: #f8fafc;
            text-decoration: none;
            font-size: 20px;
            font-weight: 800;
            display: flex;
            align-items: center;
            gap: 8px;
        }

        .logo-box span {
            color: #38bdf8;
        }

        /* Navegação Semântica com Lista */
        nav.nav-principal ul {
            list-style: none;
            margin: 0;
            padding: 0;
            display: flex;
            gap: 24px;
            align-items: center;
        }

        nav.nav-principal a {
            color: #94a3b8;
            text-decoration: none;
            font-size: 14px;
            font-weight: 600;
            padding: 8px 12px;
            border-radius: 6px;
            transition: all 0.2s ease;
        }

        nav.nav-principal a:hover {
            color: #ffffff;
            background: rgba(255, 255, 255, 0.05);
        }

        /* Página Ativa selecionada via ARIA */
        nav.nav-principal a[aria-current=&quot;page&quot;] {
            color: #38bdf8;
            background: rgba(56, 189, 248, 0.1);
        }

        .btn-cta {
            background: #0284c7;
            color: #ffffff !important;
            padding: 8px 18px !important;
            border-radius: 8px !important;
            font-weight: 700 !important;
        }

        .btn-cta:hover {
            background: #0369a1 !important;
            box-shadow: 0 4px 15px rgba(2, 132, 199, 0.4);
        }

        .conteudo-demo {
            max-width: 800px;
            margin: 40px auto;
            padding: 0 20px;
            line-height: 1.7;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;!-- Cabeçalho Global (Landmark Banner) --&gt;
    &lt;header class=&quot;topo-fixo&quot;&gt;
        &lt;div class=&quot;logo-box&quot;&gt;
            &lt;a href=&quot;#&quot;&gt;Web-Zone&lt;span&gt;Ware&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;

        &lt;!-- Navegação Primária Semântica --&gt;
        &lt;nav class=&quot;nav-principal&quot; aria-label=&quot;Menu Principal&quot;&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Início&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#&quot; aria-current=&quot;page&quot;&gt;Web Academy&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Ferramentas&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Comunidade&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;btn-cta&quot;&gt;Playground IDE&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/nav&gt;
    &lt;/header&gt;

    &lt;main class=&quot;conteudo-demo&quot;&gt;
        &lt;article&gt;
            &lt;header&gt;
                &lt;h1 style=&quot;color: #38bdf8; font-size: 32px;&quot;&gt;Cabeçalhos e Navegação Semântica&lt;/h1&gt;
                &lt;p style=&quot;color: #64748b;&quot;&gt;Exemplo ao vivo da Lição 30 da Web Academy.&lt;/p&gt;
            &lt;/header&gt;
            &lt;section&gt;
                &lt;p&gt;Role a página para observar o efeito de vidro fosco (glassmorphism) do cabeçalho fixo no topo. A estrutura é 100% acessível a leitores de tela e cumpre todas as diretrizes da WCAG 2.2.&lt;/p&gt;
            &lt;/section&gt;
        &lt;/article&gt;
    &lt;/main&gt;

&lt;/body&gt;
&lt;/html&gt;</textarea>
        </div>
    </div>
    
<div class="wzw-playground-action-bar">
        <span class="wzw-playground-desc">Teste e personalize este cabeçalho responsivo diretamente no Playground:</span><br />
        <a href="/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener">⚡ Testar no Playground IDE</a>
    </div>
</div>
<h2>7. Boas Práticas e Erros Comuns a Evitar</h2>
<ul>
<li><strong>Nunca Aninhe &lt;header&gt; Dentro de Outro &lt;header&gt;:</strong> É uma infração direta à especificação do W3C.</li>
<li><strong>Não Use &lt;nav&gt; Para Todos os Links do Rodapé:</strong> Links legais como &#8220;Termos de Uso&#8221; ou &#8220;Política de Privacidade&#8221; no rodapé pertencem simplesmente à tag <code>&lt;footer&gt;</code>, dispensando o <code>&lt;nav&gt;</code>.</li>
<li><strong>Preserve o Contraste dos Links:</strong> Certifique-se de que a cor do link ativo (<code>aria-current="page"</code>) possua contraste de pelo menos <strong>4.5:1</strong> contra a cor de fundo do cabeçalho.</li>
</ul>
<div class="wzw-callout wzw-callout-pro">
    <span class="wzw-callout-icon">🚀</span></p>
<div class="wzw-callout-text">
        <strong>Próximo Passo Didático:</strong> Na <strong>Lição 31: Novos Tipos de Input (email, date)</strong>, mergulharemos a fundo na revolução dos formulários do HTML5, explorando como os tipos <code>email</code>, <code>date</code>, <code>number</code>, <code>tel</code>, <code>range</code> e <code>color</code> acionam teclados especializados em smartphones e validam dados nativamente no cliente.
    </div>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/elementos-semanticos-html5/">Elementos Semânticos no HTML5: Header e Nav | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-academy/curso-html/elementos-semanticos-html5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Novos Elementos Estruturais do HTML5 &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-html/novos-elementos-estruturais-html5/</link>
					<comments>https://webzoneware.com/web-academy/curso-html/novos-elementos-estruturais-html5/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Wed, 21 Oct 2026 02:55:17 +0000</pubDate>
				<category><![CDATA[Curso de HTML & HTML5]]></category>
		<category><![CDATA[html5 landmarks]]></category>
		<category><![CDATA[main nav aside footer]]></category>
		<category><![CDATA[novos elementos estruturais html5]]></category>
		<category><![CDATA[section vs article html5]]></category>
		<category><![CDATA[tags semanticas html5]]></category>
		<category><![CDATA[web academy]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29319</guid>

					<description><![CDATA[<p>Antes do advento do HTML5, as páginas da internet eram construídas através de camadas infinitas de contêineres &#60;div&#62; genéricos, diferenciados apenas por classes ou IDs arbitrários (como &#60;div id="header"&#62;, &#60;div class="content"&#62; ou &#60;div id="sidebar"&#62;) — uma prática prejudicial à manutenção apelidada de &#8220;divite&#8221; (div soup). O HTML5 revolucionou a arquitetura front-end ao introduzir novos elementos [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/novos-elementos-estruturais-html5/">Novos Elementos Estruturais do HTML5 | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">Antes do advento do HTML5, as páginas da internet eram construídas através de camadas infinitas de contêineres <code>&lt;div&gt;</code> genéricos, diferenciados apenas por classes ou IDs arbitrários (como <code>&lt;div id="header"&gt;</code>, <code>&lt;div class="content"&gt;</code> ou <code>&lt;div id="sidebar"&gt;</code>) — uma prática prejudicial à manutenção apelidada de <strong>&#8220;divite&#8221; (div soup)</strong>. O HTML5 revolucionou a arquitetura front-end ao introduzir <strong>novos elementos estruturais semânticos</strong> que comunicam explicitamente o papel de cada bloco para os rastreadores do Google e criam pontos de referência acessíveis (landmarks) para leitores de tela.</p>
<h2>1. O Fim da Divite: Por Que a Semântica Estrutural Importa</h2>
<p>Um elemento <code>&lt;div&gt;</code> é completamente neutro: para o navegador e para os robôs de busca, ele não possui significado semântico nenhum além de agrupar nós para estilização com CSS. Já os novos elementos estruturais do HTML5:</p>
<ul>
<li><strong>Criam o Document Outline:</strong> Ajudam os navegadores a entender a hierarquia do documento, distinguindo o que é conteúdo central do que é navegação secundária.</li>
<li><strong>Ativam Landmarks ARIA Nativos:</strong> Softwares assistivos para deficientes visuais (como NVDA, JAWS e VoiceOver) permitem que o usuário aperte uma tecla de atalho para saltar direto para o elemento <code>&lt;main&gt;</code> ou <code>&lt;nav&gt;</code>, ignorando dezenas de links repetitivos.</li>
<li><strong>Impulsionam o SEO Orgânico:</strong> O algoritmo do Google pondera com peso superior o texto localizado dentro de tags <code>&lt;article&gt;</code> e <code>&lt;main&gt;</code>, separando-o de menus de rodapé e propagandas laterais.</li>
</ul>
<h2>2. Anatomia dos 7 Principais Elementos Estruturais</h2>
<p>Conheça as regras e o papel canônico de cada tag no esqueleto de uma página moderna:</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th style="width: 140px;">Elemento</th>
<th style="width: 180px;">Landmark ARIA Nativo</th>
<th>Regra de Uso Canônica</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>&lt;main&gt;</code></td>
<td><code>role="main"</code></td>
<td>O núcleo de conteúdo exclusivo da página. Deve haver <strong>apenas um elemento &lt;main&gt; visível</strong> por documento, e ele nunca deve conter menus globais ou rodapés repetidos.</td>
</tr>
<tr>
<td><code>&lt;header&gt;</code></td>
<td><code>role="banner"</code> (se na raiz)</td>
<td>Cabeçalho introdutório. Pode ser usado no topo do portal (logo e navegação) ou na abertura de um <code>&lt;article&gt;</code> (título, autor e data).</td>
</tr>
<tr>
<td><code>&lt;nav&gt;</code></td>
<td><code>role="navigation"</code></td>
<td>Bloco reservado para conjuntos primários de hiperlinks (menu principal, paginação ou índice de artigos).</td>
</tr>
<tr>
<td><code>&lt;article&gt;</code></td>
<td><code>role="article"</code></td>
<td>Conteúdo autônomo e independente que mantém sentido completo mesmo se distribuído isoladamente via leitor de RSS ou e-mail.</td>
</tr>
<tr>
<td><code>&lt;section&gt;</code></td>
<td><code>role="region"</code> (com título)</td>
<td>Seção temática de um documento que agrupa conteúdos relacionados (geralmente acompanhada de um cabeçalho <code>&lt;h2&gt;</code>).</td>
</tr>
<tr>
<td><code>&lt;aside&gt;</code></td>
<td><code>role="complementary"</code></td>
<td>Conteúdo tangencial ou secundário (barras laterais de posts relacionados, biografias de autor, glossários ou anúncios).</td>
</tr>
<tr>
<td><code>&lt;footer&gt;</code></td>
<td><code>role="contentinfo"</code> (se na raiz)</td>
<td>Rodapé com dados de encerramento, direitos autorais, links legais ou notas de rodapé de um artigo.</td>
</tr>
</tbody>
</table>
</div>
<h2>3. Elementos Estruturais Adicionais: figure, details e dialog</h2>
<p>Além dos blocos mestres de página, o HTML5 introduziu elementos estruturais menores de enorme valor didático:</p>
<h3>A Dupla &lt;figure&gt; e &lt;figcaption&gt;</h3>
<p>Utilizada para encapsular uma mídia (foto, gráfico, diagrama ou trecho de código) vinculando-a a uma legenda oficial explicativa:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Encapsulamento com figure e figcaption</span><br />
        <span>figure-semantica.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-53833" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">4 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-53833', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-53833', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;figure&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;img</span> <span class="wzw-tk-attr">src</span>=<span class="wzw-tk-str">&quot;img/arquitetura-html5.webp&quot;</span> <span class="wzw-tk-attr">alt</span>=<span class="wzw-tk-str">&quot;Diagrama da Árvore Semântica do HTML5&quot;</span> <span class="wzw-tk-attr">width</span>=<span class="wzw-tk-str">&quot;800&quot;</span> <span class="wzw-tk-attr">height</span>=<span class="wzw-tk-str">&quot;450&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;figcaption&gt;</span>Figura 1: Representação gráfica do Document Outline em navegadores modernos.<span class="wzw-tk-tag">&lt;/figcaption&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/figure&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;figure&gt;
    &lt;img src=&quot;img/arquitetura-html5.webp&quot; alt=&quot;Diagrama da Árvore Semântica do HTML5&quot; width=&quot;800&quot; height=&quot;450&quot;&gt;
    &lt;figcaption&gt;Figura 1: Representação gráfica do Document Outline em navegadores modernos.&lt;/figcaption&gt;
&lt;/figure&gt;</textarea>
        </div>
    </div>
    
</div>
<h3>A Dupla &lt;details&gt; e &lt;summary&gt; (Acordeão Nativo sem JavaScript)</h3>
<p>Permite criar blocos colapsáveis de perguntas frequentes (FAQ) que abrem e fecham nativamente no navegador com acessibilidade total:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 — Acordeão Nativo de Perguntas Frequentes</span><br />
        <span>faq-nativo.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-15897" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">4 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-15897', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-15897', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;details&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;summary&gt;</span>O que é o Document Outline no HTML5?<span class="wzw-tk-tag">&lt;/summary&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;p&gt;</span>É o mapa mental e estrutural que os motores de renderização criam para avaliar a hierarquia de títulos e seções de uma página.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/details&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;details&gt;
    &lt;summary&gt;O que é o Document Outline no HTML5?&lt;/summary&gt;
    &lt;p&gt;É o mapa mental e estrutural que os motores de renderização criam para avaliar a hierarquia de títulos e seções de uma página.&lt;/p&gt;
&lt;/details&gt;</textarea>
        </div>
    </div>
    
</div>
<h2>4. A Árvore de Decisão: Section vs Article vs Div</h2>
<p>Para nunca mais ter dúvidas sobre qual elemento escolher, siga este fluxo mental prático:</p>
<div class="wzw-callout wzw-callout-pro">
    <span class="wzw-callout-icon">🎯</span></p>
<div class="wzw-callout-text">
        <strong>1. O conteúdo faz sentido sozinho se compartilhado no Twitter ou leitor RSS?</strong><br />
        <br />👉 Sim → Use <strong><code>&lt;article&gt;</code></strong> (ex: post de blog, cartão de produto, comentário).</p>
<p><strong>2. Não faz sentido sozinho, mas é um bloco temático que merece um título próprio?</strong><br />
        <br />👉 Sim → Use <strong><code>&lt;section&gt;</code></strong> (ex: &#8220;Depoimentos de Clientes&#8221;, &#8220;Preços&#8221;, &#8220;Recursos&#8221;).</p>
<p><strong>3. É apenas um invólucro para aplicar Flexbox, Grid, sombra ou centralizar no CSS?</strong><br />
        <br />👉 Sim → Use <strong><code>&lt;div&gt;</code></strong> (sem culpa; a <code>&lt;div&gt;</code> continua sendo o elemento correto para fins puramente cosméticos).
    </div>
</div>
<h2>5. Exemplo Prático: Portal de Conteúdo Estruturado no Playground IDE</h2>
<p>O exemplo abaixo constrói um portal de notícias completo utilizando exclusivamente a estrutura semântica do HTML5, sem divs desnecessárias e com layout responsivo via CSS Grid:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 + CSS3 — Layout de Artigo Completo com Elementos Estruturais</span><br />
        <span>portal-semantico.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-24773" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">139 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-24773', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-24773', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;!DOCTYPE</span><span class="wzw-tk-kw"> html</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;html</span> <span class="wzw-tk-attr">lang</span>=<span class="wzw-tk-str">&quot;pt-BR&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;head&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;meta</span> <span class="wzw-tk-attr">charset</span>=<span class="wzw-tk-str">&quot;UTF-8&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;meta</span> <span class="wzw-tk-attr">name</span>=<span class="wzw-tk-str">&quot;viewport&quot;</span> <span class="wzw-tk-attr">content</span>=<span class="wzw-tk-str">&quot;width=device-width, initial-scale=1.0&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;title&gt;</span>Portal Semântico Web Academy<span class="wzw-tk-tag">&lt;/title&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;style&gt;</span></span>
<span class="wzw-code-line">        body {</span>
<span class="wzw-code-line">            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;</span>
<span class="wzw-code-line">            background: #0f172a;</span>
<span class="wzw-code-line">            color: #f8fafc;</span>
<span class="wzw-code-line">            margin: 0;</span>
<span class="wzw-code-line">            line-height: 1.6;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">/* 1. Header Global */</span></span>
<span class="wzw-code-line">        header.portal-topo {</span>
<span class="wzw-code-line">            background: #1e293b;</span>
<span class="wzw-code-line">            border-bottom: 1px solid #334155;</span>
<span class="wzw-code-line">            padding: 16px 32px;</span>
<span class="wzw-code-line">            display: flex;</span>
<span class="wzw-code-line">            justify-content: space-between;</span>
<span class="wzw-code-line">            align-items: center;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        header.portal-topo h1 {</span>
<span class="wzw-code-line">            font-size: 20px;</span>
<span class="wzw-code-line">            color: #38bdf8;</span>
<span class="wzw-code-line">            margin: 0;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        nav.menu-topo a {</span>
<span class="wzw-code-line">            color: #cbd5e1;</span>
<span class="wzw-code-line">            text-decoration: none;</span>
<span class="wzw-code-line">            margin-left: 20px;</span>
<span class="wzw-code-line">            font-weight: 600;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">/* 2. Main Grid Layout */</span></span>
<span class="wzw-code-line">        main.portal-grid {</span>
<span class="wzw-code-line">            max-width: 1100px;</span>
<span class="wzw-code-line">            margin: 40px auto;</span>
<span class="wzw-code-line">            padding: 0 20px;</span>
<span class="wzw-code-line">            display: grid;</span>
<span class="wzw-code-line">            grid-template-columns: 2.5fr 1fr;</span>
<span class="wzw-code-line">            gap: 32px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">/* 3. Artigo Principal */</span></span>
<span class="wzw-code-line">        article.artigo-destaque {</span>
<span class="wzw-code-line">            background: #1e293b;</span>
<span class="wzw-code-line">            border: 1px solid #334155;</span>
<span class="wzw-code-line">            border-radius: 16px;</span>
<span class="wzw-code-line">            padding: 32px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        article header h2 {</span>
<span class="wzw-code-line">            font-size: 28px;</span>
<span class="wzw-code-line">            color: #f8fafc;</span>
<span class="wzw-code-line">            margin: 0 0 8px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        article header time {</span>
<span class="wzw-code-line">            color: #94a3b8;</span>
<span class="wzw-code-line">            font-size: 13px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">/* 4. Barra Lateral (Aside) */</span></span>
<span class="wzw-code-line">        aside.portal-lateral {</span>
<span class="wzw-code-line">            background: #1e293b;</span>
<span class="wzw-code-line">            border: 1px solid #334155;</span>
<span class="wzw-code-line">            border-radius: 16px;</span>
<span class="wzw-code-line">            padding: 24px;</span>
<span class="wzw-code-line">            height: fit-content;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">/* 5. Rodapé Global */</span></span>
<span class="wzw-code-line">        footer.portal-rodape {</span>
<span class="wzw-code-line">            background: #0b1120;</span>
<span class="wzw-code-line">            border-top: 1px solid #1e293b;</span>
<span class="wzw-code-line">            text-align: center;</span>
<span class="wzw-code-line">            padding: 24px;</span>
<span class="wzw-code-line">            color: #64748b;</span>
<span class="wzw-code-line">            font-size: 13px;</span>
<span class="wzw-code-line">            margin-top: 60px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/style&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/head&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;body&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">&lt;!-- Cabeçalho Global (Landmark Banner) --&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;header</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;portal-topo&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;h1&gt;</span>Web-ZoneWare Academy<span class="wzw-tk-tag">&lt;/h1&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;nav</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;menu-topo&quot;</span> <span class="wzw-tk-attr">aria-label</span>=<span class="wzw-tk-str">&quot;Navegação Principal&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span><span class="wzw-tk-tag">&gt;</span>Início<span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span><span class="wzw-tk-tag">&gt;</span>Trilhas<span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;a</span> <span class="wzw-tk-attr">href</span>=<span class="wzw-tk-str">&quot;#&quot;</span><span class="wzw-tk-tag">&gt;</span>Playground IDE<span class="wzw-tk-tag">&lt;/a&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/nav&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/header&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">&lt;!-- Conteúdo Central Único (Landmark Main) --&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;main</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;portal-grid&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;article</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;artigo-destaque&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;header&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;h2&gt;</span>A Estrutura Perfeita de Páginas no HTML5<span class="wzw-tk-tag">&lt;/h2&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;time</span> <span class="wzw-tk-attr">datetime</span>=<span class="wzw-tk-str">&quot;2026-10-20&quot;</span><span class="wzw-tk-tag">&gt;</span>20 de Outubro de 2026 &amp;bull; Por Equipe Web Academy<span class="wzw-tk-tag">&lt;/time&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/header&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;section&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;p&gt;</span>Elementos estruturais não são apenas estética; são a garantia de que seu código será indexado pelo Google com máxima autoridade e acessível a qualquer pessoa no mundo.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;figure</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;margin: 24px 0;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;background: #0b1120; border: 1px dashed #38bdf8; padding: 30px; text-align: center; border-radius: 8px; color: #38bdf8;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                        [Diagrama da Arquitetura Semântica HTML5]</span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;figcaption</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;font-size: 12px; color: #94a3b8; margin-top: 6px; text-align: center;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                        Figura 1: A separação clara entre header, nav, main, article, aside e footer.</span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;/figcaption&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;/figure&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/section&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/article&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">&lt;!-- Barra Lateral Complementar (Landmark Complementary) --&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;aside</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;portal-lateral&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;h3</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;margin-top: 0; color: #38bdf8; font-size: 16px;&quot;</span><span class="wzw-tk-tag">&gt;</span>Dúvidas Frequentes<span class="wzw-tk-tag">&lt;/h3&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;details</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;margin-top: 12px; font-size: 14px;&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;summary</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;cursor: pointer; color: #e2e8f0; font-weight: 600;&quot;</span><span class="wzw-tk-tag">&gt;</span>Posso ter vários <span class="wzw-tk-tag">&lt;article&gt;</span>?<span class="wzw-tk-tag">&lt;/summary&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color: #94a3b8; margin: 8px 0 0;&quot;</span><span class="wzw-tk-tag">&gt;</span>Sim! Uma página inicial de blog pode ter dezenas de <span class="wzw-tk-tag">&lt;article&gt;</span> listando cada post.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/details&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/aside&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/main&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">&lt;!-- Rodapé Global (Landmark Contentinfo) --&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;footer</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;portal-rodape&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;margin: 0;&quot;</span><span class="wzw-tk-tag">&gt;</span>&amp;copy;&amp;nbsp;2026 Web-ZoneWare. Padrão 100% Semântico e Acessível.<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/footer&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/body&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/html&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;pt-BR&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Portal Semântico Web Academy&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;
            background: #0f172a;
            color: #f8fafc;
            margin: 0;
            line-height: 1.6;
        }

        /* 1. Header Global */
        header.portal-topo {
            background: #1e293b;
            border-bottom: 1px solid #334155;
            padding: 16px 32px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        header.portal-topo h1 {
            font-size: 20px;
            color: #38bdf8;
            margin: 0;
        }

        nav.menu-topo a {
            color: #cbd5e1;
            text-decoration: none;
            margin-left: 20px;
            font-weight: 600;
        }

        /* 2. Main Grid Layout */
        main.portal-grid {
            max-width: 1100px;
            margin: 40px auto;
            padding: 0 20px;
            display: grid;
            grid-template-columns: 2.5fr 1fr;
            gap: 32px;
        }

        /* 3. Artigo Principal */
        article.artigo-destaque {
            background: #1e293b;
            border: 1px solid #334155;
            border-radius: 16px;
            padding: 32px;
        }

        article header h2 {
            font-size: 28px;
            color: #f8fafc;
            margin: 0 0 8px;
        }

        article header time {
            color: #94a3b8;
            font-size: 13px;
        }

        /* 4. Barra Lateral (Aside) */
        aside.portal-lateral {
            background: #1e293b;
            border: 1px solid #334155;
            border-radius: 16px;
            padding: 24px;
            height: fit-content;
        }

        /* 5. Rodapé Global */
        footer.portal-rodape {
            background: #0b1120;
            border-top: 1px solid #1e293b;
            text-align: center;
            padding: 24px;
            color: #64748b;
            font-size: 13px;
            margin-top: 60px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;!-- Cabeçalho Global (Landmark Banner) --&gt;
    &lt;header class=&quot;portal-topo&quot;&gt;
        &lt;h1&gt;Web-ZoneWare Academy&lt;/h1&gt;
        &lt;nav class=&quot;menu-topo&quot; aria-label=&quot;Navegação Principal&quot;&gt;
            &lt;a href=&quot;#&quot;&gt;Início&lt;/a&gt;
            &lt;a href=&quot;#&quot;&gt;Trilhas&lt;/a&gt;
            &lt;a href=&quot;#&quot;&gt;Playground IDE&lt;/a&gt;
        &lt;/nav&gt;
    &lt;/header&gt;

    &lt;!-- Conteúdo Central Único (Landmark Main) --&gt;
    &lt;main class=&quot;portal-grid&quot;&gt;
        &lt;article class=&quot;artigo-destaque&quot;&gt;
            &lt;header&gt;
                &lt;h2&gt;A Estrutura Perfeita de Páginas no HTML5&lt;/h2&gt;
                &lt;time datetime=&quot;2026-10-20&quot;&gt;20 de Outubro de 2026 &amp;bull; Por Equipe Web Academy&lt;/time&gt;
            &lt;/header&gt;

            &lt;section&gt;
                &lt;p&gt;Elementos estruturais não são apenas estética; são a garantia de que seu código será indexado pelo Google com máxima autoridade e acessível a qualquer pessoa no mundo.&lt;/p&gt;

                &lt;figure style=&quot;margin: 24px 0;&quot;&gt;
                    &lt;div style=&quot;background: #0b1120; border: 1px dashed #38bdf8; padding: 30px; text-align: center; border-radius: 8px; color: #38bdf8;&quot;&gt;
                        [Diagrama da Arquitetura Semântica HTML5]
                    &lt;/div&gt;
                    &lt;figcaption style=&quot;font-size: 12px; color: #94a3b8; margin-top: 6px; text-align: center;&quot;&gt;
                        Figura 1: A separação clara entre header, nav, main, article, aside e footer.
                    &lt;/figcaption&gt;
                &lt;/figure&gt;
            &lt;/section&gt;
        &lt;/article&gt;

        &lt;!-- Barra Lateral Complementar (Landmark Complementary) --&gt;
        &lt;aside class=&quot;portal-lateral&quot;&gt;
            &lt;h3 style=&quot;margin-top: 0; color: #38bdf8; font-size: 16px;&quot;&gt;Dúvidas Frequentes&lt;/h3&gt;
            &lt;details style=&quot;margin-top: 12px; font-size: 14px;&quot;&gt;
                &lt;summary style=&quot;cursor: pointer; color: #e2e8f0; font-weight: 600;&quot;&gt;Posso ter vários &lt;article&gt;?&lt;/summary&gt;
                &lt;p style=&quot;color: #94a3b8; margin: 8px 0 0;&quot;&gt;Sim! Uma página inicial de blog pode ter dezenas de &lt;article&gt; listando cada post.&lt;/p&gt;
            &lt;/details&gt;
        &lt;/aside&gt;
    &lt;/main&gt;

    &lt;!-- Rodapé Global (Landmark Contentinfo) --&gt;
    &lt;footer class=&quot;portal-rodape&quot;&gt;
        &lt;p style=&quot;margin: 0;&quot;&gt;&amp;copy;&amp;nbsp;2026 Web-ZoneWare. Padrão 100% Semântico e Acessível.&lt;/p&gt;
    &lt;/footer&gt;

&lt;/body&gt;
&lt;/html&gt;</textarea>
        </div>
    </div>
    
<div class="wzw-playground-action-bar">
        <span class="wzw-playground-desc">Teste e inspecione a estrutura deste template semântico no Playground:</span><br />
        <a href="/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener">⚡ Testar no Playground IDE</a>
    </div>
</div>
<h2>6. Boas Práticas, SEO e WCAG</h2>
<ul>
<li><strong>Nunca Aninhe &lt;main&gt; Indevidamente:</strong> O elemento <code>&lt;main&gt;</code> não deve ser descendente de um <code>&lt;header&gt;</code>, <code>&lt;nav&gt;</code>, <code>&lt;aside&gt;</code> ou <code>&lt;footer&gt;</code>. Ele deve ser filho direto de <code>&lt;body&gt;</code> (ou de um container de grid/flex direto).</li>
<li><strong>Rotule Menus Múltiplos com aria-label:</strong> Se você tiver mais de um <code>&lt;nav&gt;</code> na página (ex: um no topo e outro no rodapé), diferencie-os para os leitores de tela: <code>&lt;nav aria-label="Menu Principal"&gt;</code> e <code>&lt;nav aria-label="Menu do Rodapé"&gt;</code>.</li>
<li><strong>Valide Seu Código Sem Erros:</strong> Antes de colocar layouts complexos em produção, limpe espaços redundantes com o <a href="/web-ferramentas/html-cleaner/" target="_blank" rel="noopener">HTML Cleaner &#038; Formatador</a> do Web-ZoneWare.</li>
</ul>
<div class="wzw-callout wzw-callout-pro">
    <span class="wzw-callout-icon">🚀</span></p>
<div class="wzw-callout-text">
        <strong>Próximo Passo Didático:</strong> Na <strong>Lição 30: Elementos Semânticos (header, nav)</strong>, aprofundaremos a construção de componentes de cabeçalho responsivo e barras de navegação complexas, explorando estados ativos, menus hambúrguer semânticos e boas práticas de usabilidade mobile.
    </div>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/novos-elementos-estruturais-html5/">Novos Elementos Estruturais do HTML5 | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-academy/curso-html/novos-elementos-estruturais-html5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Suporte de Navegadores ao HTML5: Guia e Can I Use &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-html/suporte-de-navegadores-html5/</link>
					<comments>https://webzoneware.com/web-academy/curso-html/suporte-de-navegadores-html5/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Wed, 21 Oct 2026 02:51:10 +0000</pubDate>
				<category><![CDATA[Curso de HTML & HTML5]]></category>
		<category><![CDATA[can i use html5]]></category>
		<category><![CDATA[compatibilidade cross-browser]]></category>
		<category><![CDATA[feature detection javascript]]></category>
		<category><![CDATA[polyfills html5]]></category>
		<category><![CDATA[suporte de navegadores ao html5]]></category>
		<category><![CDATA[web academy]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29317</guid>

					<description><![CDATA[<p>No ecossistema global da internet, os usuários navegam por meio de uma variedade imensa de motores e dispositivos: Google Chrome e Microsoft Edge (baseados em Chromium), Apple Safari no iOS e macOS (baseado em WebKit) e Mozilla Firefox (baseado em Gecko). Embora os navegadores modernos estejam amplamente sincronizados com o padrão Living Standard do HTML5, [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/suporte-de-navegadores-html5/">Suporte de Navegadores ao HTML5: Guia e Can I Use | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">No ecossistema global da internet, os usuários navegam por meio de uma variedade imensa de motores e dispositivos: Google Chrome e Microsoft Edge (baseados em Chromium), Apple Safari no iOS e macOS (baseado em WebKit) e Mozilla Firefox (baseado em Gecko). Embora os navegadores modernos estejam amplamente sincronizados com o padrão Living Standard do HTML5, nem todos os recursos, codecs de vídeo e APIs avançadas são implementados ao mesmo tempo. Compreender o <strong>suporte de navegadores ao HTML5</strong>, consultar o <em>Can I Use</em> e dominar a técnica de <strong>Detecção de Recursos (Feature Detection)</strong> é indispensável para criar aplicações robustas e livres de falhas visuais.</p>
<h2>1. O Ecossistema Cross-Browser e o Papel do Can I Use</h2>
<p>Antigamente, desenvolvedores recorriam à tentativa e erro para descobrir se uma tag funcionava em determinado navegador. Hoje, a plataforma de referência mundial para auditoria de compatibilidade é o <strong>Can I Use (caniuse.com)</strong>.</p>
<p>Ao pesquisar qualquer elemento, seletor CSS ou API do HTML5 no Can I Use, a ferramenta fornece a porcentagem exata de suporte global (Global Usage) e divide a compatibilidade em um código de cores universal:</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th style="width: 140px;">Indicador</th>
<th style="width: 160px;">Significado no Can I Use</th>
<th>Conduta Recomendada na Engenharia de Software</th>
</tr>
</thead>
<tbody>
<tr>
<td><span style="display:inline-block; padding: 2px 8px; border-radius: 4px; background: #166534; color: #ffffff; font-weight: 700; font-size: 12px;">Verde (Supported)</span></td>
<td>Suporte nativo pleno e estável.</td>
<td>Pode ser utilizado em produção imediatamente sem polyfills adicionais (se a cobertura global for superior a 95%).</td>
</tr>
<tr>
<td><span style="display:inline-block; padding: 2px 8px; border-radius: 4px; background: #854d0e; color: #ffffff; font-weight: 700; font-size: 12px;">Amarelo (Partial)</span></td>
<td>Suporte parcial ou com prefixo de fornecedor.</td>
<td>Requer testes em dispositivos reais (especialmente no Safari iOS) e fallbacks defensivos de segurança.</td>
</tr>
<tr>
<td><span style="display:inline-block; padding: 2px 8px; border-radius: 4px; background: #991b1b; color: #ffffff; font-weight: 700; font-size: 12px;">Vermelho (Not supported)</span></td>
<td>Recurso inexistente naquela versão.</td>
<td>Obrigatório implementar um <strong>Polyfill</strong> ou fornecer uma alternativa funcional graciosa.</td>
</tr>
</tbody>
</table>
</div>
<h2>2. Detecção de Recursos (Feature Detection) vs User-Agent Sniffing</h2>
<p>Durante muito tempo, programadores tentavam inspecionar o texto da string <code>navigator.userAgent</code> para adivinhar o navegador do usuário (prática conhecida como <em>User-Agent Sniffing</em>). Essa técnica é considerada um <strong>grave anti-pattern</strong> por três motivos:</p>
<ol>
<li>O <code>userAgent</code> pode ser facilmente alterado ou mascarado pelo usuário ou por extensões de privacidade.</li>
<li>Navegadores modernos frequentemente copiam partes de outros agentes para evitar bloqueios indevidos (o Chrome inclui &#8220;Safari&#8221; e o Edge inclui &#8220;Chrome&#8221; em seus user-agents).</li>
<li>A cada nova versão do navegador lançada, a lógica de checagem quebra.</li>
</ol>
<div class="wzw-callout wzw-callout-info">
    <span class="wzw-callout-icon">💡</span></p>
<div class="wzw-callout-text">
        <strong>A Abordagem Moderna: Feature Detection:</strong> Em vez de perguntar ao navegador <em>&#8220;Qual é o seu nome?&#8221;</em>, a engenharia moderna pergunta: <em>&#8220;Você consegue executar este recurso específico?&#8221;</em>. Testa-se diretamente a existência da propriedade ou método no JavaScript antes de invocá-lo.
    </div>
</div>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>JavaScript — Exemplos Canônicos de Feature Detection</span><br />
        <span>feature-detection.js</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-66834" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">JavaScript</span>
                                <span class="wzw-ide-lines-count">24 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-66834', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-66834', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">// 1. Verificando suporte à API de Geolocalização</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">if</span> (<span class="wzw-tk-str">&quot;geolocation&quot;</span> in navigator) {</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">// Seguro para solicitar coordenadas do usuário</span></span>
<span class="wzw-code-line">    navigator.geolocation.<span class="wzw-tk-fn">getCurrentPosition</span>(sucesso, erro);</span>
<span class="wzw-code-line">} <span class="wzw-tk-kw">else</span> {</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">// Fornece um campo de CEP / endereço manual alternativo</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-fn">exibirCampoCepManual</span>();</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">// 2. Verificando suporte ao Web Storage (localStorage)</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">if</span> (<span class="wzw-tk-kw">typeof</span> Storage !== <span class="wzw-tk-str">&quot;undefined&quot;</span>) {</span>
<span class="wzw-code-line">    localStorage.<span class="wzw-tk-fn">setItem</span>(<span class="wzw-tk-str">&quot;tema_wzw&quot;</span>, <span class="wzw-tk-str">&quot;dark&quot;</span>);</span>
<span class="wzw-code-line">} <span class="wzw-tk-kw">else</span> {</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">// Fallback defensivo com cookies tradicionais</span></span>
<span class="wzw-code-line">    document.cookie = <span class="wzw-tk-str">&quot;tema_wzw=dark; path=/&quot;</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">// 3. Verificando suporte nativo à tag &lt;dialog&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">if</span> (<span class="wzw-tk-kw">typeof</span> HTMLDialogElement === <span class="wzw-tk-str">&quot;function&quot;</span>) {</span>
<span class="wzw-code-line">    modal.<span class="wzw-tk-fn">showModal</span>();</span>
<span class="wzw-code-line">} <span class="wzw-tk-kw">else</span> {</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">// Abre modal alternativo controlado por classes CSS</span></span>
<span class="wzw-code-line">    modal.classList.<span class="wzw-tk-fn">add</span>(<span class="wzw-tk-str">&quot;modal-aberto&quot;</span>);</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>// 1. Verificando suporte à API de Geolocalização
if (&quot;geolocation&quot; in navigator) {
    // Seguro para solicitar coordenadas do usuário
    navigator.geolocation.getCurrentPosition(sucesso, erro);
} else {
    // Fornece um campo de CEP / endereço manual alternativo
    exibirCampoCepManual();
}

// 2. Verificando suporte ao Web Storage (localStorage)
if (typeof Storage !== &quot;undefined&quot;) {
    localStorage.setItem(&quot;tema_wzw&quot;, &quot;dark&quot;);
} else {
    // Fallback defensivo com cookies tradicionais
    document.cookie = &quot;tema_wzw=dark; path=/&quot;;
}

// 3. Verificando suporte nativo à tag &lt;dialog&gt;
if (typeof HTMLDialogElement === &quot;function&quot;) {
    modal.showModal();
} else {
    // Abre modal alternativo controlado por classes CSS
    modal.classList.add(&quot;modal-aberto&quot;);
}</textarea>
        </div>
    </div>
    
</div>
<h2>3. O Que São Polyfills e Como Devem Ser Utilizados?</h2>
<p>Um <strong>Polyfill</strong> é um trecho de código JavaScript que replica artificialmente uma API moderna do HTML5 em um navegador que ainda não a suporta de forma nativa.</p>
<div class="wzw-table-responsive">
<table class="wzw-table">
<thead>
<tr>
<th style="width: 180px;">Recurso do HTML5</th>
<th style="width: 220px;">Cenário sem Suporte</th>
<th>Como o Polyfill Atua</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>HTML5 Shiv (Histórico)</code></td>
<td>Internet Explorer 8 e anteriores não reconheciam tags como <code>&lt;main&gt;</code> e <code>&lt;section&gt;</code>.</td>
<td>Injetava nós fictícios no DOM via script para que o IE permitisse aplicar estilos CSS nas novas tags.</td>
</tr>
<tr>
<td><code>IntersectionObserver</code></td>
<td>Navegadores legados não calculavam se uma imagem entrou na tela para Lazy Loading.</td>
<td>Escuta eventos de <code>scroll</code> com <em>throttle</em> para disparar o carregamento das imagens no momento certo.</td>
</tr>
<tr>
<td><code>Dialog Element (&lt;dialog&gt;)</code></td>
<td>Navegadores antigos ignoravam o método <code>showModal()</code>.</td>
<td>Simula a janela modal flutuante e o <code>::backdrop</code> via camadas absolutas e manipulação de foco.</td>
</tr>
</tbody>
</table>
</div>
<h2>4. Progressive Enhancement vs Graceful Degradation</h2>
<p>Ao planejar a compatibilidade do seu site, duas filosofias arquiteturais orientam as decisões da equipe:</p>
<ul>
<li><strong>Melhoria Progressiva (Progressive Enhancement):</strong> Inicia-se com a base mais simples e sólida (HTML semântico e formulários puros que funcionam até em conexões 3G e navegadores simplificados). Em seguida, adicionam-se camadas de CSS3 elegante e, por fim, enriquecimentos com APIs do HTML5 caso o navegador demonstre capacidade. É a estratégia recomendada por órgãos de acessibilidade.</li>
<li><strong>Degradação Graciosa (Graceful Degradation):</strong> Projeta-se a experiência de ponta para a versão mais recente do navegador principal da sua persona. Caso o usuário acerte o site com um software antigo, a interface simplifica o recurso (por exemplo, exibindo um campo de texto comum no lugar de um seletor de data complexo), mas mantém a tarefa executável.</li>
</ul>
<h2>5. Exemplo Prático: Inspetor de Recursos HTML5 no Playground IDE</h2>
<p>O aplicativo abaixo executa uma bateria de testes de <em>Feature Detection</em> em tempo real diretamente no seu navegador, listando o status de suporte das principais APIs do HTML5:</p>
<div class="wzw-code-wrapper">
<div class="wzw-code-header">
        <span>HTML5 + CSS3 + JavaScript — Inspetor de Suporte em Tempo Real</span><br />
        <span>html5-auditor.html</span>
    </div>
    <div class="wzw-ide-card" id="wzw-code-63346" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML</span>
                                <span class="wzw-ide-lines-count">120 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-63346', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-63346', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;!DOCTYPE</span><span class="wzw-tk-kw"> html</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;html</span> <span class="wzw-tk-attr">lang</span>=<span class="wzw-tk-str">&quot;pt-BR&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;head&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;meta</span> <span class="wzw-tk-attr">charset</span>=<span class="wzw-tk-str">&quot;UTF-8&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;title&gt;</span>Auditor de Suporte HTML5 Web Academy<span class="wzw-tk-tag">&lt;/title&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;style&gt;</span></span>
<span class="wzw-code-line">        body {</span>
<span class="wzw-code-line">            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;</span>
<span class="wzw-code-line">            background: #0f172a;</span>
<span class="wzw-code-line">            color: #f8fafc;</span>
<span class="wzw-code-line">            padding: 30px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .card-auditor {</span>
<span class="wzw-code-line">            max-width: 760px;</span>
<span class="wzw-code-line">            margin: 0 auto;</span>
<span class="wzw-code-line">            background: #1e293b;</span>
<span class="wzw-code-line">            border: 1px solid #334155;</span>
<span class="wzw-code-line">            border-radius: 16px;</span>
<span class="wzw-code-line">            padding: 28px;</span>
<span class="wzw-code-line">            box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .tabela-recursos {</span>
<span class="wzw-code-line">            width: 100%;</span>
<span class="wzw-code-line">            border-collapse: collapse;</span>
<span class="wzw-code-line">            margin-top: 20px;</span>
<span class="wzw-code-line">            font-size: 14px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .tabela-recursos th, .tabela-recursos td {</span>
<span class="wzw-code-line">            padding: 12px 16px;</span>
<span class="wzw-code-line">            text-align: left;</span>
<span class="wzw-code-line">            border-bottom: 1px solid #334155;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .tabela-recursos th {</span>
<span class="wzw-code-line">            color: #94a3b8;</span>
<span class="wzw-code-line">            font-size: 12px;</span>
<span class="wzw-code-line">            text-transform: uppercase;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .badge-sucesso {</span>
<span class="wzw-code-line">            background: #065f46;</span>
<span class="wzw-code-line">            color: #a7f3d0;</span>
<span class="wzw-code-line">            padding: 3px 8px;</span>
<span class="wzw-code-line">            border-radius: 4px;</span>
<span class="wzw-code-line">            font-weight: 700;</span>
<span class="wzw-code-line">            font-size: 11px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        .badge-falha {</span>
<span class="wzw-code-line">            background: #991b1b;</span>
<span class="wzw-code-line">            color: #fecaca;</span>
<span class="wzw-code-line">            padding: 3px 8px;</span>
<span class="wzw-code-line">            border-radius: 4px;</span>
<span class="wzw-code-line">            font-weight: 700;</span>
<span class="wzw-code-line">            font-size: 11px;</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/style&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/head&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;body&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;card-auditor&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;h2</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;margin-top:0; color:#38bdf8;&quot;</span><span class="wzw-tk-tag">&gt;</span>Inspetor de Recursos HTML5 em Tempo Real<span class="wzw-tk-tag">&lt;/h2&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;p</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color:#94a3b8;&quot;</span><span class="wzw-tk-tag">&gt;</span>Resultado da auditoria executada diretamente no motor do seu navegador atual:<span class="wzw-tk-tag">&lt;/p&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;table</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;tabela-recursos&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;thead&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;tr&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;th&gt;</span>API / Recurso do HTML5<span class="wzw-tk-tag">&lt;/th&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;th&gt;</span>Propriedade Inspecionada<span class="wzw-tk-tag">&lt;/th&gt;</span></span>
<span class="wzw-code-line">                    <span class="wzw-tk-tag">&lt;th</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;text-align: right;&quot;</span><span class="wzw-tk-tag">&gt;</span>Status no Navegador<span class="wzw-tk-tag">&lt;/th&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-tag">&lt;/tr&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/thead&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;tbody</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;corpo-auditoria&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">                <span class="wzw-tk-comment">&lt;!-- Preenchido via JavaScript nativo --&gt;</span></span>
<span class="wzw-code-line">            <span class="wzw-tk-tag">&lt;/tbody&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;/table&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;script&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">// Bateria de testes de Feature Detection</span></span>
<span class="wzw-code-line">        const testes = [</span>
<span class="wzw-code-line">            { nome: &quot;Canvas 2D Graphics&quot;, prop: &quot;HTMLCanvasElement&quot;, suportado: !!window.CanvasRenderingContext2D },</span>
<span class="wzw-code-line">            { nome: &quot;Geolocalização Nativa&quot;, prop: &quot;navigator.geolocation&quot;, suportado: &quot;geolocation&quot; in navigator },</span>
<span class="wzw-code-line">            { nome: &quot;Web Storage (localStorage)&quot;, prop: &quot;window.localStorage&quot;, suportado: typeof Storage !== &quot;undefined&quot; },</span>
<span class="wzw-code-line">            { nome: &quot;Web Workers (Multithread)&quot;, prop: &quot;window.Worker&quot;, suportado: typeof Worker !== &quot;undefined&quot; },</span>
<span class="wzw-code-line">            { nome: &quot;WebSockets (Tempo Real)&quot;, prop: &quot;window.WebSocket&quot;, suportado: &quot;WebSocket&quot; in window },</span>
<span class="wzw-code-line">            { nome: &quot;Service Workers (PWA / Offline)&quot;, prop: &quot;navigator.serviceWorker&quot;, suportado: &quot;serviceWorker&quot; in navigator }</span>
<span class="wzw-code-line">        ];</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        const tbody = document.getElementById(&quot;corpo-auditoria&quot;);</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">        testes.forEach(t =&gt; {</span>
<span class="wzw-code-line">            const tr = document.createElement(&quot;tr&quot;);</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            const tdNome = document.createElement(&quot;td&quot;);</span>
<span class="wzw-code-line">            tdNome.innerHTML = `<span class="wzw-tk-tag">&lt;strong&gt;</span>${t.nome}<span class="wzw-tk-tag">&lt;/strong&gt;</span>`;</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            const tdProp = document.createElement(&quot;td&quot;);</span>
<span class="wzw-code-line">            tdProp.innerHTML = `<span class="wzw-tk-tag">&lt;code</span> <span class="wzw-tk-attr">style</span>=<span class="wzw-tk-str">&quot;color:#7dd3fc;&quot;</span><span class="wzw-tk-tag">&gt;</span>${t.prop}<span class="wzw-tk-tag">&lt;/code&gt;</span>`;</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            const tdStatus = document.createElement(&quot;td&quot;);</span>
<span class="wzw-code-line">            tdStatus.style.textAlign = &quot;right&quot;;</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            if (t.suportado) {</span>
<span class="wzw-code-line">                tdStatus.innerHTML = `<span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;badge-sucesso&quot;</span><span class="wzw-tk-tag">&gt;</span>&amp;#10003; Suportado<span class="wzw-tk-tag">&lt;/span&gt;</span>`;</span>
<span class="wzw-code-line">            } else {</span>
<span class="wzw-code-line">                tdStatus.innerHTML = `<span class="wzw-tk-tag">&lt;span</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;badge-falha&quot;</span><span class="wzw-tk-tag">&gt;</span>&amp;#10007; Não Suportado<span class="wzw-tk-tag">&lt;/span&gt;</span>`;</span>
<span class="wzw-code-line">            }</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">            tr.appendChild(tdNome);</span>
<span class="wzw-code-line">            tr.appendChild(tdProp);</span>
<span class="wzw-code-line">            tr.appendChild(tdStatus);</span>
<span class="wzw-code-line">            tbody.appendChild(tr);</span>
<span class="wzw-code-line">        });</span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/script&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/body&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/html&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;pt-BR&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;Auditor de Suporte HTML5 Web Academy&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;
            background: #0f172a;
            color: #f8fafc;
            padding: 30px;
        }

        .card-auditor {
            max-width: 760px;
            margin: 0 auto;
            background: #1e293b;
            border: 1px solid #334155;
            border-radius: 16px;
            padding: 28px;
            box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
        }

        .tabela-recursos {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
            font-size: 14px;
        }

        .tabela-recursos th, .tabela-recursos td {
            padding: 12px 16px;
            text-align: left;
            border-bottom: 1px solid #334155;
        }

        .tabela-recursos th {
            color: #94a3b8;
            font-size: 12px;
            text-transform: uppercase;
        }

        .badge-sucesso {
            background: #065f46;
            color: #a7f3d0;
            padding: 3px 8px;
            border-radius: 4px;
            font-weight: 700;
            font-size: 11px;
        }

        .badge-falha {
            background: #991b1b;
            color: #fecaca;
            padding: 3px 8px;
            border-radius: 4px;
            font-weight: 700;
            font-size: 11px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;div class=&quot;card-auditor&quot;&gt;
        &lt;h2 style=&quot;margin-top:0; color:#38bdf8;&quot;&gt;Inspetor de Recursos HTML5 em Tempo Real&lt;/h2&gt;
        &lt;p style=&quot;color:#94a3b8;&quot;&gt;Resultado da auditoria executada diretamente no motor do seu navegador atual:&lt;/p&gt;

        &lt;table class=&quot;tabela-recursos&quot;&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;API / Recurso do HTML5&lt;/th&gt;
                    &lt;th&gt;Propriedade Inspecionada&lt;/th&gt;
                    &lt;th style=&quot;text-align: right;&quot;&gt;Status no Navegador&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody id=&quot;corpo-auditoria&quot;&gt;
                &lt;!-- Preenchido via JavaScript nativo --&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;

    &lt;script&gt;
        // Bateria de testes de Feature Detection
        const testes = [
            { nome: &quot;Canvas 2D Graphics&quot;, prop: &quot;HTMLCanvasElement&quot;, suportado: !!window.CanvasRenderingContext2D },
            { nome: &quot;Geolocalização Nativa&quot;, prop: &quot;navigator.geolocation&quot;, suportado: &quot;geolocation&quot; in navigator },
            { nome: &quot;Web Storage (localStorage)&quot;, prop: &quot;window.localStorage&quot;, suportado: typeof Storage !== &quot;undefined&quot; },
            { nome: &quot;Web Workers (Multithread)&quot;, prop: &quot;window.Worker&quot;, suportado: typeof Worker !== &quot;undefined&quot; },
            { nome: &quot;WebSockets (Tempo Real)&quot;, prop: &quot;window.WebSocket&quot;, suportado: &quot;WebSocket&quot; in window },
            { nome: &quot;Service Workers (PWA / Offline)&quot;, prop: &quot;navigator.serviceWorker&quot;, suportado: &quot;serviceWorker&quot; in navigator }
        ];

        const tbody = document.getElementById(&quot;corpo-auditoria&quot;);

        testes.forEach(t =&gt; {
            const tr = document.createElement(&quot;tr&quot;);

            const tdNome = document.createElement(&quot;td&quot;);
            tdNome.innerHTML = `&lt;strong&gt;${t.nome}&lt;/strong&gt;`;

            const tdProp = document.createElement(&quot;td&quot;);
            tdProp.innerHTML = `&lt;code style=&quot;color:#7dd3fc;&quot;&gt;${t.prop}&lt;/code&gt;`;

            const tdStatus = document.createElement(&quot;td&quot;);
            tdStatus.style.textAlign = &quot;right&quot;;

            if (t.suportado) {
                tdStatus.innerHTML = `&lt;span class=&quot;badge-sucesso&quot;&gt;&amp;#10003; Suportado&lt;/span&gt;`;
            } else {
                tdStatus.innerHTML = `&lt;span class=&quot;badge-falha&quot;&gt;&amp;#10007; Não Suportado&lt;/span&gt;`;
            }

            tr.appendChild(tdNome);
            tr.appendChild(tdProp);
            tr.appendChild(tdStatus);
            tbody.appendChild(tr);
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea>
        </div>
    </div>
    
<div class="wzw-playground-action-bar">
        <span class="wzw-playground-desc">Execute este inspetor interativo e teste diferentes simulações no Playground:</span><br />
        <a href="/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener">⚡ Testar no Playground IDE</a>
    </div>
</div>
<h2>6. Boas Práticas para Blindagem de Código em Produção</h2>
<ul>
<li><strong>Use a Regra @supports no CSS:</strong> Antes de utilizar recursos avançados de layout (como Subgrid ou Backdrop-filter), condicione a regra ao suporte do navegador:
    <div class="wzw-ide-card" id="wzw-code-86969" data-lang="code">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS</span>
                                <span class="wzw-ide-lines-count">9 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-86969', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-86969', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line">.modal-backdrop {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">background</span>: rgba(15, 23, 42, 0.85); /* Fallback tradicional */</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">@supports</span> (backdrop-filter: blur(<span class="wzw-tk-num">10px</span>)) {</span>
<span class="wzw-code-line">    .modal-backdrop {</span>
<span class="wzw-code-line">        <span class="wzw-tk-attr">background</span>: rgba(15, 23, 42, 0.5);</span>
<span class="wzw-code-line">        <span class="wzw-tk-attr">backdrop-filter</span>: blur(<span class="wzw-tk-num">10px</span>);</span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>.modal-backdrop {
    background: rgba(15, 23, 42, 0.85); /* Fallback tradicional */
}
@supports (backdrop-filter: blur(10px)) {
    .modal-backdrop {
        background: rgba(15, 23, 42, 0.5);
        backdrop-filter: blur(10px);
    }
}</textarea>
        </div>
    </div>
    
</li>
<li><strong>Não Carregue Polyfills Pesados Para Quem Não Precisa:</strong> Carregar polyfills universais para 100% dos usuários penaliza o tempo de carregamento no celular de quem já usa navegadores modernos. Utilize carregamento condicional dinâmico (com <code>import()</code> dinâmico).</li>
<li><strong>Consulte Ferramentas Nativas de Otimização:</strong> Sempre formate e valide suas estruturas utilizando o <a href="/web-ferramentas/html-cleaner/" target="_blank" rel="noopener">Limpador e Formatador HTML</a> do Web-ZoneWare.</li>
</ul>
<div class="wzw-callout wzw-callout-pro">
    <span class="wzw-callout-icon">🚀</span></p>
<div class="wzw-callout-text">
        <strong>Próximo Passo Didático:</strong> Na <strong>Lição 29: Novos Elementos Estruturais</strong>, faremos uma imersão profunda nos elementos semânticos que organizam o esqueleto de páginas profissionais: <code>&lt;section&gt;</code>, <code>&lt;article&gt;</code>, <code>&lt;nav&gt;</code>, <code>&lt;aside&gt;</code>, <code>&lt;figure&gt;</code> e <code>&lt;dialog&gt;</code>, aprendendo como eliminar a &#8220;divite&#8221; e criar hierarquias perfeitas para SEO e acessibilidade.
    </div>
</div>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/suporte-de-navegadores-html5/">Suporte de Navegadores ao HTML5: Guia e Can I Use | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-academy/curso-html/suporte-de-navegadores-html5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
