Telas padrão

Design System

Quatro telas prontas para copiar no começo de qualquer sistema.

Painel, perfil, configurações e acesso já vêm montados com os componentes do DS, no claro e no escuro. Para um sistema novo, copie a tela mais próxima e troque o conteúdo; o kit no fim da página traz os seis passos e o esqueleto mínimo da casca, pronto para colar.

Painel de métricas

A tela de referência do DS: casca Névoa, painel Tela com luz no topo, vidro, Ardósia e gráfico.

Painel

Ponto de partida de todo sistema

Use como primeira tela depois de entrar: o número principal em cima, métricas em pílulas e o detalhe em cartões. É a única tela com cabeçalho de métricas (.painel-cabeca) no lugar do .topo.

Anatomia
  1. Marca.marca logotipo + .nome[data-marca]
  2. Barra superior.topo-barra com .busca, .sino-caixa › .redondo.sino + .ponto e o .popover de notificações (o comum.js abre), .translucido, .avatar.tinta e .redondo.abrir-gaveta (abre a lateral abaixo de 1024px)
  3. Lateral.lateral › .nav (.nav-rotulo, .contagem, .nav-sub com .ponto-s) e .conta com .menu-conta
  4. Cabeçalho de métricas.painel-cabeca › .titulo-agua, .metrica-principal com .seletor-texto, .cartao-resumo.vidro e .cartao-resumo.destaque
  5. Faixa de números.faixa-pilulas › 4 .pilula-numero
  6. Lista + detalhe.grade-lista-detalhe: cartão de agenda (.bloco.nevoa, tarefas .item-lista.opcao, candidaturas com .avatar + .pilula)
  7. Cartão de análise.filtros com .chip + .fechar e .grade-3: .bloco com .grafico-barras, .bloco com .barra-prog, .bloco.degrade + .mancha com .botao.destaque.cheio
Componentes Arquivo
Design System/exemplos/painel.htmlAbrir

Perfil

“Minha conta”: foto, nome de exibição, fuso, idioma, avisos e sessões. Leva da .conta e do avatar da barra.

Perfil

Conta de quem está usando

A pessoa aparece por foto + nome de exibição; o e-mail vem do Google e não se edita aqui. Um .botao só, no .topo; o resto é .fantasma.

Anatomia
  1. Cascaa mesma do painel; no .menu-conta, “Perfil” leva aria-current="page"
  2. Topo.topo › h1 + .trilha (Painel › Conta › Perfil) e .botao “Salvar alterações”
  3. Foto e nome.avatar.grande, .zona de arquivo, .fantasma “Usar a foto do Google”, .campo com .dica, e-mail readonly e .nota com i-escudo
  4. Fuso e idioma.campo + select[data-combo] ×2
  5. Avisos.item-lista.opcao com .chave à direita
  6. Sessões.item-lista com .disco, .pilula.ok “Atual” ou .fantasma “Encerrar”; .fantasma.perigo “Sair de todas”
  7. Confirmaçãodialog.janela “Sair de todas as sessões?” (Cancelar antes, Sair à direita)
Componentes Arquivo
Design System/exemplos/perfil.htmlAbrir

Configurações

As regras do sistema: geral, equipe, avisos e dados. Abas no topo levam às seções.

Configurações

Sistema, equipe, avisos e dados

Cada seção é um .cartao com “rótulo + chave à direita”. Só contas @impulsamos.es entram na equipe e baixam dados; apagar vai para a lixeira.

Anatomia
  1. Topo.topo › h1 + .trilha (Painel › Configurações)
  2. Abasnav.abas com a.chip[role=tab][aria-selected] que levam a #geral, #equipe, #avisos, #dados
  3. Sistema.cartao-cabeca com .acoes › .botao.compacto; nome do sistema (até 12 letras), fuso select[data-combo], .opcao + .chave
  4. Equipe.fantasma “Convidar”, .filtros com .chip + .busca, .rola-x › table com .autor, .pilula.destaque/.aberto, .col-esconde e .icone[aria-controls] que abre .popover.menu-linha (o comum.js abre)
  5. Avisos.opcao + .chave ×3 e o remetente em select[data-combo]
  6. Dados.botao.baixa.compacto “Baixar (CSV)”, .nota, .item-lista da lixeira e .fantasma.perigo “Excluir este sistema”
  7. Janelasconvidar, remover e excluir (o botão só libera ao digitar EXCLUIR)
Componentes Arquivo
Design System/exemplos/configuracoes.htmlAbrir

Acesso (entrar)

Fora da casca: body.acesso, fundo Névoa com luz e manchas, e o cartão de vidro com Entrar com Google.

Acesso

Login do time, só @impulsamos.es

O exemplo oficial é exemplos/acesso.html (28/10/2026), cópia da versão viva aprovada: só o cartão, de vidro (.acesso-grade.so-cartao › .acesso-cartao.cartao.vidro), nunca branco. O modelo completo do layouts.css põe ao lado a .acesso-vitrine: cartão de vidro com título-marca-d’água, o símbolo em LED num .bloco.escuro (canvas[data-simbolo-led] + simbolo-led.js) e .faixa-pilulas.

Anatomia
  1. Fundobody.acesso (--g-painel sobre Névoa) + .mancha.um/.dois/.tres e .simbolo-fundo
  2. Topoheader.acesso-topo › .marca com o logotipo à esquerda e .marca.acesso-sistema › .nome[data-marca] à direita
  3. Cartãomain.acesso-grade.so-cartao › section.acesso-cartao.cartao.vidro com h1 “Entrar”
  4. Ação.botao.claro.cheio.sem-seta com .g-disco + G do Google e “Entrar com Google”
  5. Avisos.nota#erro-login[hidden] (conta fora do domínio) e .nota com i-escudo
  6. Rodapé.rodape “Precisa de acesso? Fale com quem administra.”
Componentes Arquivo
Design System/exemplos/acesso.htmlAbrir
Legado

Design System/exemplos/entrar.html é a tela do sistema anterior (vitrine Tinta, .entrar) e está travada no Drive. Não parta dela: use exemplos/acesso.html. A plataforma usa a mesma tela em frontend/conta/entrar.html.

Kit para começar um sistema novo

Seis passos, na ordem. Ao fim, você tem a casca funcionando e só falta o conteúdo.

  1. Copiar a pasta do DS

    Copie os arquivos de Design System/ para o front do projeto, sem editar. Mudança que vale para todos os sistemas volta para a pasta do DS; estilo de uma tela só vai num <style> dela, sempre com tokens.

    Código
    seu-sistema/
    ├── tokens.css      ← fundações: cores, tipografia, raios, sombras, vidro, degradês, espaços, movimento
    ├── base.css        ← componentes prontos (classes)
    ├── layouts.css     ← cascas de tela: sistema, acesso, grades, responsivo
    ├── comum.js        ← comportamentos: tema, menus, combo, calendário, véu, lateral, gaveta, avisar()
    ├── marca.js        ← nome do sistema embaralha ao passar o mouse
    ├── icones.svg      ← ícones Lucide (traço 1.5) em <symbol>
    ├── logotipo.svg    ← logotipo oficial (566,95 × 74,97)
    ├── simbolo.svg     ← símbolo "Caminhos"
    ├── simbolo-led.js  ← só se a tela de acesso tiver a vitrine com o símbolo em LED
    └── index.html      ← suas telas, montadas a partir de exemplos/
  2. Carregar na ordem certa

    tokens.css → base.css → layouts.css no <head>, com as fontes Sora e Inter. comum.js e marca.js no fim do body, depois do sprite. Título da aba: Tela · Impulsamos | NOME.

    Código
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Tela · Impulsamos | NOME</title>
    <script>try{if(localStorage.getItem('impulsamos:tema')==='escuro')document.documentElement.dataset.tema='escuro'}catch(e){}</script>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Sora:wght@100..800&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="tokens.css?v=202610301802">
    <link rel="stylesheet" href="base.css?v=202610301802">
    <link rel="stylesheet" href="layouts.css?v=202610301802">
    <!-- estilo só desta tela: <style> aqui, sempre com var(--…) -->
    </head>
    <body class="casca">
      …
      <!-- fim do body: sprite de ícones, depois os scripts -->
      <script src="comum.js?v=202610301802"></script>
      <script src="marca.js?v=202610301802"></script>
    </body>
  3. Montar o esqueleto da casca

    O HTML mínimo completo: marca, barra superior, lateral e painel, com trilha no topo, um cartão e os ícones que ele usa. Como nos exemplos (corrigidos em 28/10/2026): o sino dentro de .sino-caixa (abre as notificações) e o .abrir-gaveta (abre a lateral abaixo de 1024px).

    Código do esqueleto
    <!doctype html>
    <html lang="pt-BR">
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Processos · Impulsamos | NOME</title>
    <script>try{if(localStorage.getItem('impulsamos:tema')==='escuro')document.documentElement.dataset.tema='escuro'}catch(e){}</script>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Sora:wght@100..800&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="tokens.css?v=202610301802">
    <link rel="stylesheet" href="base.css?v=202610301802">
    <link rel="stylesheet" href="layouts.css?v=202610301802">
    </head>
    <body class="casca">
    
      <div class="marca">
        <svg class="logo" fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 566.95 74.97"><path d="M74.97,37.48c-13.91-1.2-21.96-3.12-29-2.73-5.6.29-9.94,4.44-10.71,11-.19,5.6,1.55,22.46,2.23,29.22,1.2-10.15,1.43-25.01,9.12-30.84,6.33-4.81,16.87-5.44,28.37-6.64Z"></path><path d="M0,37.48c13.91,1.2,21.96,3.12,29,2.73,5.6-.29,9.94-4.44,10.71-11,.19-5.6-1.55-22.46-2.23-29.22-1.2,10.15-1.43,25.01-9.12,30.84-6.33,4.81-16.87,5.44-28.37,6.64Z"></path><path d="M97.45,59.28V15.69h5.6v43.59h-5.6Z"></path><path d="M119.24,59.28V15.69h9.03l13.87,29.72,1.23-.02,13.86-29.7h9.03v43.59h-5.6V21.92l.06-.62h-.12l-15.85,34.19h-3.98l-15.85-34.19h-.12l.06.62v37.36h-5.6Z"></path><path d="M414.39,59.28V15.69h9.03l13.87,29.72,1.23-.02,13.86-29.7h9.03v43.59h-5.6V21.92l.06-.62h-.12l-15.85,34.19h-3.98l-15.85-34.19h-.12l.06.62v37.36h-5.6Z"></path><path d="M182.44,59.28V15.69h18.37c3.24,0,6.08.62,8.53,1.87,2.45,1.25,4.34,2.96,5.67,5.14,1.33,2.18,1.99,4.62,1.99,7.32s-.66,5.14-1.99,7.32c-1.33,2.18-3.22,3.89-5.67,5.14-2.45,1.25-5.29,1.87-8.53,1.87h-12.76v14.94h-5.6ZM200.81,39.04c3.36,0,5.97-.83,7.82-2.49,1.85-1.66,2.77-3.84,2.77-6.54s-.92-4.88-2.77-6.54c-1.85-1.66-4.45-2.49-7.82-2.49h-12.76v18.06h12.76Z"></path><path d="M247.2,60.52c-3.4,0-6.4-.73-9-2.18s-4.6-3.52-6.01-6.2-2.12-5.8-2.12-9.37V15.69h5.6v27.09c0,3.86,1.05,6.9,3.14,9.12,2.1,2.22,4.89,3.33,8.38,3.33s6.28-1.11,8.38-3.33c2.1-2.22,3.14-5.26,3.14-9.12V15.69h5.6v27.09c0,3.57-.71,6.69-2.12,9.37s-3.42,4.74-6.01,6.2c-2.59,1.45-5.59,2.18-9,2.18Z"></path><path d="M280.21,59.28V15.69h5.6v38.3h22.73v5.29h-28.33Z"></path><path d="M335.63,60.52c-3.53,0-6.56-.64-9.09-1.93-2.53-1.29-4.53-2.97-5.98-5.04-1.45-2.08-2.45-4.32-2.99-6.73h5.6c.66,2.33,2.04,4.31,4.14,5.95,2.1,1.64,4.87,2.46,8.31,2.46,2.41,0,4.43-.33,6.07-1,1.64-.66,2.85-1.56,3.64-2.68.79-1.12,1.18-2.39,1.18-3.8,0-1.49-.51-2.73-1.53-3.71-1.02-.97-2.28-1.75-3.8-2.33-1.52-.58-3.6-1.25-6.26-1.99-3.36-.95-6.06-1.85-8.1-2.68-2.03-.83-3.78-2.06-5.23-3.71-1.45-1.64-2.18-3.79-2.18-6.44,0-2.2.63-4.25,1.9-6.17,1.27-1.91,3.08-3.43,5.45-4.58,2.37-1.14,5.11-1.71,8.22-1.71,3.28,0,6.1.57,8.47,1.71,2.37,1.14,4.22,2.63,5.57,4.45,1.35,1.83,2.27,3.82,2.77,5.98h-5.6c-.58-1.91-1.81-3.53-3.67-4.86-1.87-1.33-4.38-1.99-7.54-1.99-2.08,0-3.87.33-5.39,1-1.52.66-2.66,1.54-3.42,2.62-.77,1.08-1.15,2.26-1.15,3.55,0,1.45.5,2.66,1.5,3.61,1,.96,2.25,1.72,3.77,2.3,1.52.58,3.58,1.22,6.2,1.93,3.36.96,6.08,1.87,8.16,2.74,2.08.87,3.84,2.14,5.29,3.8,1.45,1.66,2.18,3.82,2.18,6.48,0,2.33-.65,4.45-1.96,6.38s-3.21,3.48-5.7,4.64c-2.49,1.16-5.44,1.74-8.84,1.74Z"></path><path d="M362.4,59.28l11.21-43.59h17.12l11.21,43.59h-5.6l-3.42-12.77h-21.48l-3.42,12.77h-5.6ZM372.68,41.22h18.99l-5.29-20.24h-8.41l-5.29,20.24Z"></path><path d="M498.15,60.52c-4.32,0-8.2-.99-11.64-2.96-3.45-1.97-6.15-4.71-8.13-8.22-1.97-3.51-2.96-7.46-2.96-11.86s.99-8.35,2.96-11.86c1.97-3.51,4.68-6.25,8.13-8.22,3.45-1.97,7.33-2.96,11.64-2.96s8.2.99,11.64,2.96c3.45,1.97,6.15,4.71,8.13,8.22,1.97,3.51,2.96,7.46,2.96,11.86s-.99,8.35-2.96,11.86c-1.97,3.51-4.68,6.25-8.13,8.22-3.45,1.97-7.33,2.96-11.64,2.96ZM498.15,55.23c3.28,0,6.23-.75,8.84-2.24,2.62-1.49,4.65-3.58,6.1-6.26,1.45-2.68,2.18-5.76,2.18-9.25s-.73-6.57-2.18-9.25c-1.45-2.68-3.49-4.76-6.1-6.26s-5.56-2.24-8.84-2.24-6.23.75-8.84,2.24-4.65,3.58-6.1,6.26c-1.45,2.68-2.18,5.76-2.18,9.25s.73,6.57,2.18,9.25c1.45,2.68,3.49,4.76,6.1,6.26,2.62,1.49,5.56,2.24,8.84,2.24Z"></path><path d="M550.45,60.52c-3.53,0-6.56-.64-9.09-1.93-2.53-1.29-4.53-2.97-5.98-5.04-1.45-2.08-2.45-4.32-2.99-6.73h5.6c.66,2.33,2.04,4.31,4.14,5.95,2.1,1.64,4.87,2.46,8.31,2.46,2.41,0,4.43-.33,6.07-1,1.64-.66,2.85-1.56,3.64-2.68.79-1.12,1.18-2.39,1.18-3.8,0-1.49-.51-2.73-1.53-3.71-1.02-.97-2.28-1.75-3.8-2.33-1.52-.58-3.6-1.25-6.26-1.99-3.36-.95-6.06-1.85-8.1-2.68-2.03-.83-3.78-2.06-5.23-3.71-1.45-1.64-2.18-3.79-2.18-6.44,0-2.2.63-4.25,1.9-6.17,1.27-1.91,3.08-3.43,5.45-4.58,2.37-1.14,5.11-1.71,8.22-1.71,3.28,0,6.1.57,8.47,1.71,2.37,1.14,4.22,2.63,5.57,4.45,1.35,1.83,2.27,3.82,2.77,5.98h-5.6c-.58-1.91-1.81-3.53-3.67-4.86-1.87-1.33-4.38-1.99-7.54-1.99-2.08,0-3.87.33-5.39,1-1.52.66-2.66,1.54-3.42,2.62-.77,1.08-1.15,2.26-1.15,3.55,0,1.45.5,2.66,1.5,3.61,1,.96,2.25,1.72,3.77,2.3,1.52.58,3.58,1.22,6.2,1.93,3.36.96,6.08,1.87,8.16,2.74,2.08.87,3.84,2.14,5.29,3.8,1.45,1.66,2.18,3.82,2.18,6.48,0,2.33-.65,4.45-1.96,6.38s-3.21,3.48-5.7,4.64c-2.49,1.16-5.44,1.74-8.84,1.74Z"></path></svg>
        <span class="nome" data-marca="NOME">NOME</span>
      </div>
    
      <header class="topo-barra">
        <div class="busca">
          <svg class="i"><use href="#i-busca"/></svg>
          <input type="search" placeholder="Buscar" aria-label="Buscar">
        </div>
        <div class="vao"></div>
        <div class="sino-caixa">
          <button class="redondo sino" aria-label="Notificações" aria-haspopup="menu" aria-expanded="false"><svg class="i"><use href="#i-sino"/></svg><span class="ponto"></span></button>
          <div class="popover" role="menu" hidden>
            <div class="popover-topo"><strong>Notificações</strong><button type="button">Marcar todas como lidas</button></div>
            <a class="notif" href="#"><div><strong>Nova candidatura</strong><p>Marina Costa se candidatou a Growth Marketer.</p><time>há 10 min</time></div></a>
          </div>
        </div>
        <a class="avatar tinta" href="perfil.html" title="ana.ribeiro@impulsamos.es" aria-label="Perfil">AR</a>
        <button class="redondo abrir-gaveta" aria-label="Abrir menu" aria-expanded="false"><svg class="i"><use href="#i-menu"/></svg></button>
      </header>
    
      <aside class="lateral">
        <nav class="nav" aria-label="Navegação principal">
          <div class="nav-rotulo"><svg class="i"><use href="#i-maleta"/></svg>Recrutamento</div>
          <a href="index.html"><span class="com-icone"><svg class="i"><use href="#i-painel"/></svg>Painel</span></a>
          <a href="processos.html" class="ativo" aria-current="page"><span class="com-icone"><svg class="i"><use href="#i-lista"/></svg>Processos</span><span class="contagem">4</span></a>
          <a href="candidatos.html"><span class="com-icone"><svg class="i"><use href="#i-pessoas"/></svg>Candidatos</span></a>
        </nav>
        <div class="vao"></div>
        <div class="conta">
          <button class="conta-botao" aria-haspopup="menu" aria-expanded="false">
            <span class="avatar">AR</span>
            <span class="conta-nome"><strong>Ana Ribeiro</strong><span>ana.ribeiro@impulsamos.es</span></span>
            <svg class="i"><use href="#i-abre"/></svg>
          </button>
          <div class="popover menu-conta" role="menu" hidden>
            <a href="perfil.html" role="menuitem"><svg class="i"><use href="#i-usuario"/></svg>Perfil</a>
            <a href="configuracoes.html#equipe" role="menuitem"><svg class="i"><use href="#i-pessoas"/></svg>Equipe</a>
            <a href="configuracoes.html" role="menuitem"><svg class="i"><use href="#i-ajuste"/></svg>Configurações</a>
            <a href="acesso.html" role="menuitem" class="separa perigo"><svg class="i"><use href="#i-sair"/></svg>Sair</a>
          </div>
        </div>
      </aside>
    
      <main class="painel">
        <div class="painel-conteudo">
    
          <div class="topo">
            <div class="titulo">
              <h1>Processos</h1>
              <nav class="trilha" aria-label="Você está em"><a href="index.html">Painel</a><svg class="i"><use href="#i-proximo"/></svg><strong aria-current="page">Processos</strong></nav>
            </div>
            <button class="botao"><span>Novo processo</span></button>
          </div>
    
          <section class="cartao">
            <div class="cartao-cabeca">
              <span class="cartao-titulo">Processos abertos</span>
              <div class="acoes"><button class="fantasma">Exportar</button></div>
              <div class="sub">Uma linha que explica o que o cartão mostra.</div>
            </div>
            <p>Conteúdo do cartão, com <strong>negrito no que importa</strong>.</p>
          </section>
    
        </div>
      </main>
    
    <!-- ÍCONES (icones.svg): cole uma vez, no fim do body -->
    <svg width="0" height="0" style="position:absolute" aria-hidden="true">
      <symbol id="i-abre" viewBox="0 0 24 24"><path d="m7 15 5 5 5-5"/><path d="m7 9 5-5 5 5"/></symbol>
      <symbol id="i-ajuste" viewBox="0 0 24 24"><path d="M14 17H5"/><path d="M19 7h-9"/><circle cx="17" cy="17" r="3"/><circle cx="7" cy="7" r="3"/></symbol>
      <symbol id="i-busca" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></symbol>
      <symbol id="i-lista" viewBox="0 0 24 24"><path d="M3 5h.01"/><path d="M3 12h.01"/><path d="M3 19h.01"/><path d="M8 5h13"/><path d="M8 12h13"/><path d="M8 19h13"/></symbol>
      <symbol id="i-maleta" viewBox="0 0 24 24"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/></symbol>
      <symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 6h16"/><path d="M4 12h16"/><path d="M4 18h16"/></symbol>
      <symbol id="i-painel" viewBox="0 0 24 24"><rect width="7" height="9" x="3" y="3" rx="1"/><rect width="7" height="5" x="14" y="3" rx="1"/><rect width="7" height="9" x="14" y="12" rx="1"/><rect width="7" height="5" x="3" y="16" rx="1"/></symbol>
      <symbol id="i-pessoas" viewBox="0 0 24 24"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><path d="M16 3.128a4 4 0 0 1 0 7.744"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><circle cx="9" cy="7" r="4"/></symbol>
      <symbol id="i-proximo" viewBox="0 0 24 24"><path d="m9 18 6-6-6-6"/></symbol>
      <symbol id="i-sair" viewBox="0 0 24 24"><path d="m16 17 5-5-5-5"/><path d="M21 12H9"/><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/></symbol>
      <symbol id="i-sino" viewBox="0 0 24 24"><path d="M10.268 21a2 2 0 0 0 3.464 0"/><path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326"/></symbol>
      <symbol id="i-usuario" viewBox="0 0 24 24"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol>
    </svg>
    <script src="comum.js?v=202610301802"></script>
    <script src="marca.js?v=202610301802"></script>
    </body>
    </html>
  4. Aplicar o tema escuro

    Uma linha no <head>, antes dos CSS. O comum.js cria o botão lua/sol no pé da lateral e guarda a escolha. O escuro é escolha da pessoa, nunca automático pelo sistema operacional.

    Código
    <!-- 1. no <head>, antes dos CSS: aplica o tema salvo antes de pintar (sem piscar) -->
    <script>try{if(localStorage.getItem('impulsamos:tema')==='escuro')document.documentElement.dataset.tema='escuro'}catch(e){}</script>
    
    <!-- 2. nada mais: o comum.js cria o botão lua/sol no pé da lateral (.lateral-pe > .tema)
            e guarda a escolha em localStorage "impulsamos:tema" (escuro | claro).
            Opcional, em tela sem lateral: qualquer botão com data-alternar-tema faz o mesmo. -->
    <button class="redondo" data-alternar-tema aria-label="Modo escuro"><svg class="i tema-lua"><use href="#i-lua"/></svg><svg class="i tema-sol"><use href="#i-sol"/></svg></button>
  5. Usar o sprite de ícones

    Cole os <symbol> de icones.svg uma vez, no fim do body. Todo ícone é Lucide com traço 1.5, vindo do CSS: nunca copie o stroke-width="2" do site da Lucide.

    Código
    <!-- uma vez, no fim do <body>: o conteúdo de icones.svg (só os <symbol> que a tela usa já basta) -->
    <svg width="0" height="0" style="position:absolute" aria-hidden="true">
      <symbol id="i-busca" viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></symbol>
      <!-- … -->
    </svg>
    
    <!-- uso: sempre class="i" (o traço 1.5 vem do CSS) -->
    <svg class="i"><use href="#i-busca"/></svg>
  6. Usar a marca

    Logotipo SVG embutido (156px na casca, nunca imagem) e, 16px abaixo, o nome curto do sistema em caixa alta. Com marca.js, as letras embaralham ao passar o mouse; recolhida, a lateral mostra só o símbolo.

    Código
    <div class="marca">
      <svg class="logo" fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 566.95 74.97"><!-- caminhos de logotipo.svg --></svg>
      <span class="nome" data-marca="NOME">NOME</span>
    </div>
    …
    <script src="marca.js?v=202610301802"></script>

Modo escuro

As quatro telas com <html data-tema="escuro">. Nada muda no HTML: tudo vem dos tokens e dos blocos “MODO ESCURO” do base.css e do layouts.css.

Painel
Perfil
Configurações
Acesso
O que muda em cada tela
Os tokens mantêm o nome e trocam o valor pelo mesmo papel.
OndeClaroEscuroTelas
Casca (atrás do painel)--nevoa #EAF0F5Tinta #101820todas
Painel e blocos--tela #F5F8FB#14202B (Tinta + 20% Ardósia)painel, perfil, configurações
Cartão, campo, menu--branco #FFFFFF#1A2C3A (Tinta + 48% Ardósia)todas
Luz do topo e manchasBruma / Bruma ProfundaArdósia sobre Tintapainel, acesso
Texto--tinta #101820Tela #F5F8FB em alfa (46 → .5, 32 → .38)todas
Links, nome do sistema--ardosia-media #4B6478Aço #8FA6B8todas
Destaque Ardósia.cartao.destaque, .bloco.escuroArdósia + luz Ardósia/Aço no canto e fio claropainel
Ícone e barra de destaque--acento = Ardósia--acento = Brumapainel (gráfico, pílulas de número), perfil
Gráficobarra Bruma Profunda, alta Ardósiabarra Ardósia + Aço, alta Brumapainel
.botao padrãoTinta, hover ArdósiaBruma com texto Tinta, hover branco, luz Limaperfil, configurações
.botao.clarobrancocontinua branco (Entrar com Google)acesso
Controle marcado--marcado = ArdósiaLima com gota/check Tintapainel (tarefas), perfil, configurações
Item ativo.chip.ativo, aba: TintaLima com texto Tinta; ícone ativo da lateral em Limaconfigurações, lateral
Pílulas de estadofundo claro + cor fortefundo escuro + cor semântica clarapainel, perfil, configurações
Menus e janelasvidro branco 78–86%--vidro-denso #1A2C3A a 86%todas
Foco pelo tecladoanel Bruma Profunda 4pxanel Lima a 50%, 3pxtodas
Título-marca-d’águaTinta a 30%Tela a 30%painel

Regras

O que vale para qualquer tela nova montada a partir destas.

Faça
  • Parta da tela mais próxima e troque só o conteúdo.
  • Ponha a trilha no .topo, começando no painel inicial.
  • Um .botao por grupo de ações; o resto é .fantasma.
  • Apagar vai para a lixeira, com confirmação numa .janela.
  • Estilo de uma tela só num <style> dela, com tokens.
Evite
  • Reescrever um componente que já existe no base.css.
  • Escuro automático pelo sistema operacional.
  • Dois blocos escuros encostados ou Ardósia como fundo de página.
  • Controle com o visual do navegador (select, data, alert).
  • Rodapé ou assinatura no pé da lateral.
Exemplos completos (28/10/2026): as telas de exemplos/ já têm o .abrir-gaveta, o sino dentro da .sino-caixa (abre as notificações), o menu ⋯ aberto pelo comum.js e o painel sem style="" de layout (só o dado de cada barra fica inline). Pode copiar direto.