Logotipos
Abaixo estão as variações oficiais da marca. Utilize a opção que oferecer o melhor contraste com o fundo da sua aplicação.
Template Slide
Baixe o template oficial em PowerPoint (PPTX) ou para importar no Google Slides.
Biblioteca de icones
Utilize a biblioteca Lucide para os icones do projeto.
Paleta Original WES
Use esta paleta para manter a compatibilidade visual com as interfaces atuais do WES.
Gradiente Principal
Paleta Cromatica
1. Cores para Fundo Claro (#FFFFFF)
Para fundos claros, priorize azuis mais escuros e saturados para manter contraste e leitura confortaveis.
2. Cores para Fundo Escuro (#000000)
Para fundos escuros, use variacoes mais claras e vibrantes da paleta para que os elementos de interface fiquem legiveis.
Tipografia WES Hub 360
Escala tipografica baseada no Material Design do dashboard.
"Inter", "Segoe UI", "Helvetica Neue", Arial, sans-serif
Paleta WES Hub 360
Use esta paleta nas novas interfaces do Hub 360.
Gradientes
Tokens Principais
Extras
Shadows
Componentes WES Hub 360
Componentes visuais com codigo em HTML, React e TypeScript.
Button
Variantes primary, outline e danger.
<button class="btn primary">Primary</button>
<button class="btn outline">Outline</button>
<button class="btn primary with-icon"><i class="icon"></i>Enviar pacote</button>
<button class="btn danger">Danger</button>
<button className="btn primary">Primary</button>
<button className="btn outline">Outline</button>
<button className="btn primary with-icon"><Icon />Enviar pacote</button>
<button className="btn danger">Danger</button>
type ButtonVariant = "primary" | "outline" | "danger";
type ButtonProps = {
variant?: ButtonVariant;
label: string;
disabled?: boolean;
};
const Button: React.FC<ButtonProps> = ({ variant = "primary", label, disabled }) => (
<button className={`btn ${variant}`} disabled={disabled}>{label}</button>
);
const IconButton: React.FC = () => (
<button className="btn primary with-icon">
<Icon />Enviar pacote
</button>
);
Icon Button
Botao circular para acoes rapidas.
<button class="icon-btn" data-tooltip="Notificacoes">🔔</button>
<button className="icon-btn" data-tooltip="Notificacoes">🔔</button>
type IconButtonProps = {
label: string;
children: React.ReactNode;
};
const IconButton: React.FC<IconButtonProps> = ({ label, children }) => (
<button className="icon-btn" data-tooltip={label}>{children}</button>
);
Badge
Indicador numerico para notificacoes.
<span class="badge">3</span>
<span className="badge">3</span>
type BadgeProps = { value: number };
const Badge: React.FC<BadgeProps> = ({ value }) => (
<span className="badge">{value}</span>
);
Search Field
Campo de busca com icone.
<div class="search-field">
<input type="text" placeholder="Buscar agendamento" />
</div>
<div className="search-field">
<input type="text" placeholder="Buscar agendamento" />
</div>
const SearchField: React.FC = () => (
<div className="search-field">
<input type="text" placeholder="Buscar agendamento" />
</div>
);
Form Field
Campo com label e input.
<label class="form-field">
<span>Email</span>
<input type="email" placeholder="voce@exemplo.com" />
</label>
<label className="form-field">
<span>Email</span>
<input type="email" placeholder="voce@exemplo.com" />
</label>
const FormField: React.FC = () => (
<label className="form-field">
<span>Email</span>
<input type="email" placeholder="voce@exemplo.com" />
</label>
);
Stat Card
Card de indicadores para dashboards.
<div class="stat-card">
<div class="stat-icon">...</div>
<div class="stat-body">
<div class="stat-value">124</div>
<div class="stat-label">Ativos</div>
</div>
</div>
<div className="stat-card">
<div className="stat-icon">...</div>
<div className="stat-body">
<div className="stat-value">124</div>
<div className="stat-label">Ativos</div>
</div>
</div>
type StatCardProps = { value: number; label: string };
const StatCard: React.FC<StatCardProps> = ({ value, label }) => (
<div className="stat-card">
<div className="stat-icon">...</div>
<div className="stat-body">
<div className="stat-value">{value}</div>
<div className="stat-label">{label}</div>
</div>
</div>
);
Tabs de Navegacao
Tabs horizontais com destaque azul na aba ativa.
<nav class="hub-tabs">
<button class="hub-tab active">Visao geral</button>
<button class="hub-tab">Assinatura</button>
<button class="hub-tab">Faturamento</button>
<button class="hub-tab">Chaves de API</button>
<button class="hub-tab">Ambientes</button>
</nav>
<nav className="hub-tabs">
<button className="hub-tab active">Visao geral</button>
<button className="hub-tab">Assinatura</button>
<button className="hub-tab">Faturamento</button>
<button className="hub-tab">Chaves de API</button>
<button className="hub-tab">Ambientes</button>
</nav>
type HubTab = { label: string; active?: boolean };
const HubTabs: React.FC<{ tabs: HubTab[] }> = ({ tabs }) => (
<nav className="hub-tabs">
{tabs.map((tab) => (
<button
key={tab.label}
className={`hub-tab${tab.active ? " active" : ""}`}
type="button"
>
{tab.label}
</button>
))}
</nav>
);
Tabela (Genérica)
Tabela com linhas arredondadas e ações à direita.
<div class="hub-table">
<div class="hub-row header">...</div>
<div class="hub-row">...</div>
</div>
<div className="hub-table">
<div className="hub-row header">...</div>
<div className="hub-row">...</div>
</div>
type Row = { name: string; id: string; internal: string; desc: string };
const Table: React.FC<{ rows: Row[] }> = ({ rows }) => (
<div className="hub-table">
<div className="hub-row header">...</div>
{rows.map((row) => (
<div className="hub-row" key={row.id}>...</div>
))}
</div>
);
Paginação
Navegação com seta e página ativa sublinhada.
<div class="hub-pagination">
<button class="page-arrow">‹</button>
<button class="page-btn active">1</button>
<button class="page-btn">2</button>
<span>…</span>
<button class="page-arrow">›</button>
</div>
<div className="hub-pagination">
<button className="page-arrow">‹</button>
<button className="page-btn active">1</button>
<button className="page-btn">2</button>
<span>…</span>
<button className="page-arrow">›</button>
</div>
const Pagination: React.FC = () => (
<div className="hub-pagination">
<button className="page-arrow">‹</button>
<button className="page-btn active">1</button>
<button className="page-btn">2</button>
<span>…</span>
<button className="page-arrow">›</button>
</div>
);
Modal
Modal de criacao com campos.
<button class="btn primary">Criar agente</button>
<div class="modal-demo">
<div class="modal-backdrop"></div>
<div class="modal-card">...</div>
</div>
<button className="btn primary">Criar agente</button>
<div className="modal-demo">
<div className="modal-backdrop" />
<div className="modal-card">...</div>
</div>
const AgentModal: React.FC = () => (
<div className="modal-demo">
<div className="modal-backdrop" />
<div className="modal-card">...</div>
</div>
);
Toggle / Switch
Controle de habilitar/desabilitar.
<div class="modal-toggle">
<span>Permitir conhecimento interno</span>
<label class="switch">
<input type="checkbox" />
<span class="switch-track"></span>
</label>
<span>Nao</span>
</div>
<div className="modal-toggle">
<span>Permitir conhecimento interno</span>
<label className="switch">
<input type="checkbox" />
<span className="switch-track" />
</label>
<span>Nao</span>
</div>
const Toggle: React.FC = () => (
<div className="modal-toggle">
<span>Permitir conhecimento interno</span>
<label className="switch">
<input type="checkbox" />
<span className="switch-track" />
</label>
<span>Nao</span>
</div>
);
Filtro com Menu
Botão de filtros com menu de opções.
<button class="filter-btn">Filtros</button>
<div class="filter-menu">...</div>
<button className="filter-btn">Filtros</button>
<div className="filter-menu">...</div>
const FilterMenu: React.FC = () => (
<div>
<button className="filter-btn">Filtros</button>
<div className="filter-menu">...</div>
</div>
);
Ícones WES Hub 360
Tipografia WES Landing Page
Baseada em Roboto Flex para comunicação institucional.
"Roboto Flex", "Roboto", sans-serif
Paleta WES Landing Page
Identidade visual institucional do site.
Gradiente principal
Cores principais
Componentes WES Landing Page
Componentes do site institucional com preview e snippets.
Cards Grid
Cards com imagem e tag.
<div class="cards-grid">
<article class="card">
<span class="tag">Setor Público</span>
<img src="mock_publico.jpg" alt="Setor Público" />
<div class="card-hover">Automação de processos e atendimento no setor público.</div>
</article>
<article class="card">
<span class="tag">Energia</span>
<img src="mock_energia.jpg" alt="Energia" />
</article>
<article class="card">
<span class="tag">Saúde</span>
<img src="mock_saude.jpg" alt="Saúde" />
</article>
<article class="card">
<span class="tag">Documentos</span>
<img src="mock_documentos.jpg" alt="Documentos" />
</article>
<article class="card wide">
<span class="tag">Personalizado</span>
<img src="mock_personalizado.jpg" alt="Personalizado" />
</article>
</div>
<div className="cards-grid">
<article className="card">
<span className="tag">Setor Público</span>
<img src="mock_publico.jpg" alt="Setor Público" />
<div className="card-hover">Automação de processos e atendimento no setor público.</div>
</article>
<article className="card">
<span className="tag">Energia</span>
<img src="mock_energia.jpg" alt="Energia" />
</article>
<article className="card">
<span className="tag">Saúde</span>
<img src="mock_saude.jpg" alt="Saúde" />
</article>
<article className="card">
<span className="tag">Documentos</span>
<img src="mock_documentos.jpg" alt="Documentos" />
</article>
<article className="card wide">
<span className="tag">Personalizado</span>
<img src="mock_personalizado.jpg" alt="Personalizado" />
</article>
</div>
const CardsGrid: React.FC = () => (
<div className="cards-grid">
<article className="card">
<span className="tag">Setor Público</span>
<img src="mock_publico.jpg" alt="Setor Público" />
<div className="card-hover">Automação de processos e atendimento no setor público.</div>
</article>
<article className="card">
<span className="tag">Energia</span>
<img src="mock_energia.jpg" alt="Energia" />
</article>
<article className="card">
<span className="tag">Saúde</span>
<img src="mock_saude.jpg" alt="Saúde" />
</article>
<article className="card">
<span className="tag">Documentos</span>
<img src="mock_documentos.jpg" alt="Documentos" />
</article>
<article className="card wide">
<span className="tag">Personalizado</span>
<img src="mock_personalizado.jpg" alt="Personalizado" />
</article>
</div>
);
Solutions Carousel
Cards horizontais com CTA.
CCO Inteligente
Solução para monitoramento e gestão em tempo real com predições.
Cockpit de insights inteligente que gera sugestões e automações para reduzir falhas e acelerar decisões.
Gestão SEI
Plataforma de inteligência aplicada ao SEI com painel simples.
Centraliza processos, prazos e intimações, com resumos claros e alertas proativos.
Errata Inteligente
Aplique correções em massa com busca inteligente.
Automatize o processamento de correções e elimine a busca manual linha por linha.
PrevClima
Antecipação de falhas na rede elétrica com IA.
Cruze previsões e históricos para mapear riscos e reduzir tempo de resposta.
Leitura de Exames
Validação automática de exames.
Analise requisições, confronte inventário e destaque divergências com rapidez.
Faturamento Logístico
Validação automática de rotas e quilometragem.
Audite trajetos e assegure pagamentos precisos com dados de GPS.
Cidadão 360
Gestão unificada do relacionamento com o município.
Centralize dados e crie campanhas automatizadas com visão única.
<div class="solutions-carousel">
<div class="solutions-track">
<article class="solution-card">...</article>
<article class="solution-card">...</article>
</div>
</div>
<div className="solutions-carousel">
<div className="solutions-track">
<article className="solution-card">...</article>
<article className="solution-card">...</article>
</div>
</div>
const SolutionsCarousel: React.FC = () => (
<div className="solutions-carousel">
<div className="solutions-track">
<article className="solution-card">...</article>
<article className="solution-card">...</article>
</div>
</div>
);
Mobile Menu
Menu mobile com links e CTA.
<div class="mobile-header">
<button class="menu-toggle">☰</button>
</div>
<div class="mobile-menu">
<nav class="mobile-nav">...</nav>
<input type="text" placeholder="Buscar..." />
<a class="btn primary">Fale conosco</a>
</div>
<div className="mobile-header">
<button className="menu-toggle">☰</button>
</div>
<div className="mobile-menu">
<nav className="mobile-nav">...</nav>
<input type="text" placeholder="Buscar..." />
<a className="btn primary">Fale conosco</a>
</div>
const MobileMenu: React.FC = () => (
<>
<div className="mobile-header">
<button className="menu-toggle">☰</button>
</div>
<div className="mobile-menu">
<nav className="mobile-nav">...</nav>
<input type="text" placeholder="Buscar..." />
<a className="btn primary">Fale conosco</a>
</div>
</>
);
Carousel Controls
Setas e pontos de navegação.
<div class="carousel-controls">
<button class="icon-button ghost"><i data-lucide="arrow-left"></i></button>
<div class="dots">...</div>
<button class="icon-button ghost"><i data-lucide="arrow-right"></i></button>
</div>
<div className="carousel-controls">
<button className="icon-button ghost"><i data-lucide="arrow-left"></i></button>
<div className="dots">...</div>
<button className="icon-button ghost"><i data-lucide="arrow-right"></i></button>
</div>
const CarouselControls: React.FC = () => (
<div className="carousel-controls">
<button className="icon-button ghost"><i data-lucide="arrow-left"></i></button>
<div className="dots">...</div>
<button className="icon-button ghost"><i data-lucide="arrow-right"></i></button>
</div>
);
FAB (Back to Top)
Botao flutuante de retorno ao topo.
<button class="back-to-top">↑</button>
<button className="back-to-top">↑</button>
const BackToTop: React.FC = () => <button className="back-to-top">↑</button>;