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.
Baixe o template oficial em PowerPoint (PPTX) ou para importar no Google Slides.
Baixe o template oficial do papel da empresa nos formatos Pages, Word e PDF.
Utilize a biblioteca Lucide para os icones do projeto.
Use esta paleta para manter a compatibilidade visual com as interfaces atuais do WES.
Para fundos claros, priorize azuis mais escuros e saturados para manter contraste e leitura confortaveis.
Para fundos escuros, use variacoes mais claras e vibrantes da paleta para que os elementos de interface fiquem legiveis.
Escala tipografica do Hub 360 organizada em prancha de referencia com Inter.
Font Family: Inter
Variable: Display Large
Size/Line Height: 56px/88px
Letter Spacing: -1% ou -0.01em
Font Weights:
Font Family: Inter
Variable: Display Medium
Size/Line Height: 48px/72px
Letter Spacing: -1% ou -0.01em
Font Weights:
Font Family: Inter
Variable: Headline Large
Size/Line Height: 32px/56px
Letter Spacing: -1% ou -0.01em
Font Weights:
Font Family: Inter
Variable: Body
Size/Line Height: 16px/24px
Letter Spacing: Normal
Font Weights:
Font Family: Inter
Variable: Label
Size/Line Height: 14px/16px
Letter Spacing: Normal
Font Weights:
Use esta paleta nas novas interfaces do Hub 360.
Componentes visuais com codigo em HTML, React e TypeScript.
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>
);
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>
);
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>
);
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>
);
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>
);
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 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 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>
);
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 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>
);
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>
);
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>
);
Escala tipografica aplicada na landing page institucional, com a prancha de referencia em Roboto.
Font Family: Roboto
Variable: Hero (H1)
Size/Line Height: 48px/56px
Letter Spacing: -1% ou -0.01em
Font Weights:
Font Family: Roboto
Variable: Section (H2)
Size/Line Height: 32px/40px
Letter Spacing: -1% ou -0.01em
Font Weights:
Font Family: Roboto
Variable: Body
Size/Line Height: 16px/24px
Letter Spacing: Normal
Font Weights:
Font Family: Roboto
Variable: Label
Size/Line Height: 14px/16px
Letter Spacing: Normal
Font Weights:
Identidade visual institucional do site.
Componentes do site institucional com preview e snippets.
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>
);
Cards horizontais com CTA.
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.
Plataforma de inteligência aplicada ao SEI com painel simples.
Centraliza processos, prazos e intimações, com resumos claros e alertas proativos.
Aplique correções em massa com busca inteligente.
Automatize o processamento de correções e elimine a busca manual linha por linha.
Antecipação de falhas na rede elétrica com IA.
Cruze previsões e históricos para mapear riscos e reduzir tempo de resposta.
Validação automática de exames.
Analise requisições, confronte inventário e destaque divergências com rapidez.
Validação automática de rotas e quilometragem.
Audite trajetos e assegure pagamentos precisos com dados de GPS.
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>
);
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>
</>
);
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>
);
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>;