Modos de Banner¶
Visão Geral¶
O Banner de Consentimento é a interface visual que solicita consentimento dos usuários para coleta e processamento de dados. O Complyr oferece o modo Layered (Camadas), que combina:
- Interface simples: Botões "Aceitar Todos" e "Rejeitar Todos" para decisões rápidas
- Controle granular: Modal de preferências para customização por finalidade
- Conformidade LGPD: Atende todos os requisitos legais (Art. 8º, § 5º)
- UX otimizada: Não interrompe a navegação, permite acesso ao site
Modo Layered (Camadas)¶
Conceito¶
O modo Layered apresenta informações de forma progressiva:
- Camada 1 - Banner Simples: Exibido ao carregar a página
- Mensagem curta e clara
- Botões "Aceitar Todos", "Rejeitar Todos", "Gerenciar Preferências"
-
Link para Política de Privacidade
-
Camada 2 - Modal de Preferências: Aberto sob demanda
- Controle granular por finalidade (5 categorias)
- Descrição detalhada de cada finalidade
- Toggle switches para ativar/desativar
- Botão "Salvar Preferências"
Benefícios do Modo Layered¶
| Aspecto | Benefício |
|---|---|
| Simplicidade | 80% dos usuários escolhem "Aceitar Todos" ou "Rejeitar Todos" rapidamente |
| Controle | 20% que desejam customizar têm acesso granular completo |
| Compliance | Atende LGPD Art. 8º, § 5º (consentimento destacado) |
| Taxa de Aceitação | ~65% aceitam pelo menos algumas finalidades (vs ~40% em banners tudo-ou-nada) |
| UX | Não força o usuário a revisar todas as opções se não quiser |
Fluxo de Interação¶
sequenceDiagram
participant U as Usuário
participant B as Banner (Camada 1)
participant M as Modal (Camada 2)
participant S as Sistema
U->>B: Visita página
B->>U: Exibe banner simples
alt Usuário quer decisão rápida
U->>B: Clica "Aceitar Todos"
B->>S: Salva consentimento GRANTED
S-->>U: Banner oculta, site carrega normalmente
else Usuário rejeita tudo
U->>B: Clica "Rejeitar Todos"
B->>S: Salva consentimento DENIED
S-->>U: Banner oculta, apenas essenciais
else Usuário quer customizar
U->>B: Clica "Gerenciar Preferências"
B->>M: Abre modal de preferências
M->>U: Exibe 5 finalidades com toggles
U->>M: Seleciona finalidades desejadas
U->>M: Clica "Salvar Preferências"
M->>S: Salva consentimento PARTIAL
S-->>U: Modal fecha, site carrega com preferências
end Camada 1: Banner Simples¶
Estrutura Padrão¶
<div id="complyr-banner" class="complyr-banner bottom">
<!-- Mensagem -->
<div class="complyr-banner-content">
<p class="complyr-banner-message">
Usamos cookies para melhorar sua experiência. Você pode aceitar todos,
rejeitar ou escolher individualmente as finalidades.
<a href="/politica-privacidade" target="_blank" class="complyr-link">
Saiba mais
</a>
</p>
</div>
<!-- Botões de Ação -->
<div class="complyr-banner-actions">
<button class="complyr-btn complyr-btn-reject" onclick="window.complyr.rejectAll()">
Rejeitar Todos
</button>
<button class="complyr-btn complyr-btn-customize" onclick="window.complyr.openPreferences()">
Gerenciar Preferências
</button>
<button class="complyr-btn complyr-btn-accept" onclick="window.complyr.acceptAll()">
Aceitar Todos
</button>
</div>
</div>
Posicionamento¶
O banner pode ser posicionado em 3 locações:
| Posição | Classe CSS | Descrição | Quando Usar |
|---|---|---|---|
| Bottom | .bottom | Parte inferior da página (padrão) | Desktop e mobile (menos intrusivo) |
| Top | .top | Parte superior da página | Alta visibilidade, importante chamar atenção |
| Center | .center | Modal centralizado | Máxima atenção, decisão crítica |
Exemplo de Configuração:
// Configurar posição do banner
window.complyrConfig = {
workspaceId: 'YOUR_WORKSPACE_ID',
banner: {
position: 'bottom', // 'top', 'bottom', 'center'
theme: 'light', // 'light', 'dark'
showCloseButton: false // Não permitir fechar sem interagir
}
};
Customização de Cores¶
Tema Claro (Light - Padrão):
.complyr-banner {
background-color: #ffffff;
color: #333333;
border-top: 1px solid #e0e0e0;
box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
}
.complyr-btn-accept {
background-color: #4CAF50; /* Verde */
color: #ffffff;
}
.complyr-btn-reject {
background-color: #f44336; /* Vermelho */
color: #ffffff;
}
.complyr-btn-customize {
background-color: #2196F3; /* Azul */
color: #ffffff;
}
Tema Escuro (Dark):
.complyr-banner.dark {
background-color: #212121;
color: #ffffff;
border-top: 1px solid #424242;
}
.complyr-banner.dark .complyr-btn-accept {
background-color: #66BB6A; /* Verde claro */
}
.complyr-banner.dark .complyr-btn-reject {
background-color: #EF5350; /* Vermelho claro */
}
.complyr-banner.dark .complyr-btn-customize {
background-color: #42A5F5; /* Azul claro */
}
Customização Avançada (Matching Brand Colors):
/* Sobrescrever cores padrão com cores da marca */
.complyr-banner {
background-color: #1a1a1a; /* Cor de fundo da marca */
color: #f5f5f5;
font-family: 'Montserrat', sans-serif; /* Fonte da marca */
}
.complyr-btn-accept {
background-color: #ff6600; /* Laranja da marca */
border-radius: 8px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.complyr-btn-accept:hover {
background-color: #ff7700;
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(255, 102, 0, 0.3);
}
Textos e Traduções¶
Texto Padrão (Português):
window.complyrConfig = {
banner: {
message: 'Usamos cookies para melhorar sua experiência. Você pode aceitar todos, rejeitar ou escolher individualmente.',
acceptAllText: 'Aceitar Todos',
rejectAllText: 'Rejeitar Todos',
customizeText: 'Gerenciar Preferências',
privacyPolicyText: 'Política de Privacidade',
privacyPolicyUrl: '/politica-privacidade'
}
};
Tradução para Inglês:
window.complyrConfig = {
language: 'en',
banner: {
message: 'We use cookies to improve your experience. You can accept all, reject all, or customize individually.',
acceptAllText: 'Accept All',
rejectAllText: 'Reject All',
customizeText: 'Manage Preferences',
privacyPolicyText: 'Privacy Policy',
privacyPolicyUrl: '/privacy-policy'
}
};
Detecção Automática de Idioma:
// Detectar idioma do navegador
const userLang = navigator.language || navigator.userLanguage;
const language = userLang.startsWith('pt') ? 'pt-BR' : 'en-US';
window.complyrConfig = {
language: language,
// Textos serão carregados automaticamente baseado no idioma
};
Camada 2: Modal de Preferências¶
Estrutura Completa¶
<div id="complyr-preferences-modal" class="complyr-modal">
<!-- Overlay escuro (fundo) -->
<div class="complyr-modal-overlay" onclick="window.complyr.closePreferences()"></div>
<!-- Conteúdo do Modal -->
<div class="complyr-modal-content">
<!-- Cabeçalho -->
<div class="complyr-modal-header">
<h2>Gerenciar Preferências de Cookies</h2>
<button class="complyr-modal-close" onclick="window.complyr.closePreferences()">
✕
</button>
</div>
<!-- Corpo - Finalidades -->
<div class="complyr-modal-body">
<!-- Essential (Sempre Ativo) -->
<div class="complyr-purpose-item">
<div class="complyr-purpose-header">
<div class="complyr-purpose-info">
<h3>🔒 Essenciais</h3>
<span class="complyr-always-active">Sempre Ativo</span>
</div>
<label class="complyr-switch disabled">
<input type="checkbox" checked disabled>
<span class="complyr-slider"></span>
</label>
</div>
<p class="complyr-purpose-description">
Cookies necessários para o funcionamento básico do site (login, carrinho, segurança).
Estes cookies não podem ser desativados.
</p>
<details class="complyr-purpose-details">
<summary>Ver cookies essenciais (3)</summary>
<ul>
<li><code>session_token</code> - Mantém você logado (24 horas)</li>
<li><code>csrf_token</code> - Protege contra ataques (sessão)</li>
<li><code>cart_id</code> - Armazena carrinho de compras (7 dias)</li>
</ul>
</details>
</div>
<!-- Analytics (Opcional) -->
<div class="complyr-purpose-item">
<div class="complyr-purpose-header">
<div class="complyr-purpose-info">
<h3>📊 Análise</h3>
</div>
<label class="complyr-switch">
<input type="checkbox" id="analytics-toggle" data-purpose="analytics">
<span class="complyr-slider"></span>
</label>
</div>
<p class="complyr-purpose-description">
Usamos Google Analytics e Hotjar para entender como você usa nosso site e melhorar sua experiência.
<a href="/politica-privacidade#analytics" target="_blank">Saiba mais</a>
</p>
<details class="complyr-purpose-details">
<summary>Ver ferramentas de análise (2)</summary>
<ul>
<li><strong>Google Analytics</strong> - Tráfego, comportamento, conversões</li>
<li><strong>Hotjar</strong> - Heatmaps, gravações de sessão</li>
</ul>
</details>
</div>
<!-- Marketing (Opcional) -->
<div class="complyr-purpose-item">
<div class="complyr-purpose-header">
<div class="complyr-purpose-info">
<h3>📢 Marketing</h3>
</div>
<label class="complyr-switch">
<input type="checkbox" id="marketing-toggle" data-purpose="marketing">
<span class="complyr-slider"></span>
</label>
</div>
<p class="complyr-purpose-description">
Usamos Facebook Pixel e Google Ads para exibir anúncios relevantes e medir campanhas.
<a href="/politica-privacidade#marketing" target="_blank">Saiba mais</a>
</p>
<details class="complyr-purpose-details">
<summary>Ver ferramentas de marketing (2)</summary>
<ul>
<li><strong>Facebook Pixel</strong> - Remarketing, conversões no Facebook/Instagram</li>
<li><strong>Google Ads</strong> - Rastreamento de campanhas Google</li>
</ul>
</details>
</div>
<!-- Personalization (Opcional) -->
<div class="complyr-purpose-item">
<div class="complyr-purpose-header">
<div class="complyr-purpose-info">
<h3>🎨 Personalização</h3>
</div>
<label class="complyr-switch">
<input type="checkbox" id="personalization-toggle" data-purpose="personalization">
<span class="complyr-slider"></span>
</label>
</div>
<p class="complyr-purpose-description">
Personalizamos recomendações de produtos e conteúdo com base no seu histórico de navegação.
<a href="/politica-privacidade#personalization" target="_blank">Saiba mais</a>
</p>
</div>
<!-- Third Party (Opcional) -->
<div class="complyr-purpose-item">
<div class="complyr-purpose-header">
<div class="complyr-purpose-info">
<h3>🔌 Terceiros</h3>
</div>
<label class="complyr-switch">
<input type="checkbox" id="third-party-toggle" data-purpose="third_party">
<span class="complyr-slider"></span>
</label>
</div>
<p class="complyr-purpose-description">
Carregamos serviços de terceiros como chat ao vivo (Intercom), mapas (Google Maps) e vídeos (YouTube).
<a href="/politica-privacidade#third-party" target="_blank">Saiba mais</a>
</p>
<details class="complyr-purpose-details">
<summary>Ver serviços de terceiros (3)</summary>
<ul>
<li><strong>Intercom</strong> - Chat ao vivo para suporte</li>
<li><strong>Google Maps</strong> - Mapas interativos</li>
<li><strong>YouTube</strong> - Vídeos embarcados</li>
</ul>
</details>
</div>
</div>
<!-- Rodapé - Botões -->
<div class="complyr-modal-footer">
<button class="complyr-btn complyr-btn-secondary" onclick="window.complyr.rejectAll()">
Rejeitar Todos
</button>
<button class="complyr-btn complyr-btn-primary" onclick="window.complyr.savePreferences()">
Salvar Preferências
</button>
<button class="complyr-btn complyr-btn-success" onclick="window.complyr.acceptAll()">
Aceitar Todos
</button>
</div>
</div>
</div>
Toggle Switches (Interruptores)¶
Design Moderno:
.complyr-switch {
position: relative;
display: inline-block;
width: 50px;
height: 24px;
}
.complyr-switch input {
opacity: 0;
width: 0;
height: 0;
}
.complyr-slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
transition: 0.3s;
border-radius: 24px;
}
.complyr-slider:before {
position: absolute;
content: "";
height: 18px;
width: 18px;
left: 3px;
bottom: 3px;
background-color: white;
transition: 0.3s;
border-radius: 50%;
}
input:checked + .complyr-slider {
background-color: #4CAF50; /* Verde quando ativado */
}
input:checked + .complyr-slider:before {
transform: translateX(26px);
}
/* Estado desabilitado (Essential) */
.complyr-switch.disabled .complyr-slider {
background-color: #9e9e9e;
cursor: not-allowed;
}
Acessibilidade:
<!-- ARIA labels para screen readers -->
<label class="complyr-switch" aria-label="Habilitar cookies de análise">
<input
type="checkbox"
id="analytics-toggle"
data-purpose="analytics"
role="switch"
aria-checked="false"
>
<span class="complyr-slider" aria-hidden="true"></span>
</label>
<!-- Focus visível para navegação por teclado -->
<style>
.complyr-switch input:focus + .complyr-slider {
box-shadow: 0 0 0 3px rgba(76, 175, 80, 0.3);
outline: 2px solid #4CAF50;
outline-offset: 2px;
}
</style>
Responsividade Mobile¶
Adaptação Automática¶
O banner e modal se adaptam automaticamente para dispositivos móveis:
Desktop (> 768px): - Banner: Largura total, altura ~100px - Modal: 600px de largura, centralizado - Botões: Lado a lado (horizontal)
Tablet (480px - 768px): - Banner: Largura total, altura ~120px - Modal: 90% da largura da tela - Botões: Lado a lado, tamanho reduzido
Mobile (< 480px): - Banner: Largura total, altura ajustável - Modal: Tela inteira (100vw x 100vh) - Botões: Empilhados verticalmente
CSS Responsivo:
/* Mobile First */
.complyr-banner {
position: fixed;
bottom: 0;
left: 0;
right: 0;
width: 100%;
padding: 16px;
z-index: 9999;
}
.complyr-banner-actions {
display: flex;
flex-direction: column; /* Vertical no mobile */
gap: 8px;
margin-top: 12px;
}
.complyr-btn {
width: 100%;
padding: 12px 16px;
font-size: 14px;
border-radius: 6px;
cursor: pointer;
border: none;
font-weight: 600;
}
/* Tablet */
@media (min-width: 480px) {
.complyr-banner-actions {
flex-direction: row; /* Horizontal */
justify-content: flex-end;
}
.complyr-btn {
width: auto;
min-width: 120px;
}
}
/* Desktop */
@media (min-width: 768px) {
.complyr-banner {
padding: 20px 40px;
}
.complyr-banner-content {
max-width: 1200px;
margin: 0 auto;
display: flex;
align-items: center;
justify-content: space-between;
}
.complyr-banner-actions {
margin-top: 0;
margin-left: 24px;
}
}
/* Modal Responsivo */
.complyr-modal-content {
width: 100%;
height: 100%;
max-height: none;
border-radius: 0;
}
@media (min-width: 768px) {
.complyr-modal-content {
width: 600px;
height: auto;
max-height: 80vh;
border-radius: 12px;
}
}
Touch-Friendly¶
Botões com tamanho mínimo:
/* Tamanho mínimo de 44x44px para touch (WCAG 2.1 AAA) */
.complyr-btn {
min-height: 44px;
min-width: 44px;
touch-action: manipulation; /* Evita delay de 300ms no click */
}
/* Aumentar área clicável dos toggles */
.complyr-switch {
min-width: 60px;
min-height: 34px;
}
Acessibilidade (A11y)¶
Navegação por Teclado¶
Suporte completo:
<!-- Foco automático no banner quando exibido -->
<div
id="complyr-banner"
class="complyr-banner"
role="dialog"
aria-labelledby="complyr-banner-title"
aria-modal="false"
tabindex="-1"
>
<p id="complyr-banner-title" class="sr-only">
Banner de consentimento de cookies
</p>
<!-- Botões navegáveis por Tab -->
<button
class="complyr-btn complyr-btn-reject"
tabindex="0"
onclick="window.complyr.rejectAll()"
>
Rejeitar Todos
</button>
</div>
<style>
/* Ocultar visualmente mas manter acessível para screen readers */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
/* Focus visível */
.complyr-btn:focus {
outline: 2px solid #4CAF50;
outline-offset: 2px;
}
</style>
Navegação por Teclas:
// Capturar teclas Enter e Espaço nos toggles
document.querySelectorAll('.complyr-switch input').forEach(toggle => {
toggle.addEventListener('keydown', function(e) {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault();
this.checked = !this.checked;
this.dispatchEvent(new Event('change'));
}
});
});
// Fechar modal com Escape
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape' && modalIsOpen) {
window.complyr.closePreferences();
}
});
Screen Readers¶
ARIA labels e roles:
<!-- Banner -->
<div
role="region"
aria-label="Banner de consentimento de cookies"
aria-live="polite"
>
<p id="banner-description">
Usamos cookies para melhorar sua experiência. Você pode aceitar todos,
rejeitar ou escolher individualmente.
</p>
</div>
<!-- Modal -->
<div
id="preferences-modal"
role="dialog"
aria-modal="true"
aria-labelledby="modal-title"
aria-describedby="modal-description"
>
<h2 id="modal-title">Gerenciar Preferências de Cookies</h2>
<p id="modal-description">
Escolha quais finalidades você permite que processem seus dados.
</p>
<!-- Toggle com estado anunciado -->
<label class="complyr-switch" for="analytics-toggle">
<span>Análise</span>
<input
type="checkbox"
id="analytics-toggle"
role="switch"
aria-checked="false"
aria-label="Habilitar cookies de análise para Google Analytics e Hotjar"
>
</label>
</div>
Anúncios Dinâmicos:
// Anunciar mudanças para screen readers
function updateConsentAnnouncement(purpose, granted) {
const announcement = document.createElement('div');
announcement.setAttribute('role', 'status');
announcement.setAttribute('aria-live', 'polite');
announcement.className = 'sr-only';
announcement.textContent = `Cookies de ${purpose} ${granted ? 'ativados' : 'desativados'}`;
document.body.appendChild(announcement);
setTimeout(() => announcement.remove(), 3000);
}
Contraste de Cores (WCAG AAA)¶
Garantir contraste mínimo de 7:1:
/* Texto sobre fundo claro */
.complyr-banner {
background-color: #ffffff;
color: #000000; /* Contraste: 21:1 (AAA) */
}
/* Botões com contraste adequado */
.complyr-btn-accept {
background-color: #2E7D32; /* Verde escuro */
color: #ffffff; /* Contraste: 8.1:1 (AAA) */
}
.complyr-btn-reject {
background-color: #C62828; /* Vermelho escuro */
color: #ffffff; /* Contraste: 7.3:1 (AAA) */
}
/* Links com sublinhado (não apenas cor) */
.complyr-link {
color: #0D47A1; /* Azul escuro */
text-decoration: underline;
font-weight: 600;
}
.complyr-link:hover {
text-decoration-thickness: 2px;
}
Animações e Transições¶
Entrada Suave¶
Banner sliding from bottom:
@keyframes slideInUp {
from {
transform: translateY(100%);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
.complyr-banner {
animation: slideInUp 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
/* Respeitar preferências de movimento reduzido */
@media (prefers-reduced-motion: reduce) {
.complyr-banner {
animation: none;
transition: none;
}
}
Modal fade-in:
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes scaleIn {
from {
transform: scale(0.9);
opacity: 0;
}
to {
transform: scale(1);
opacity: 1;
}
}
.complyr-modal-overlay {
animation: fadeIn 0.3s ease-out;
}
.complyr-modal-content {
animation: scaleIn 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
Transições Interativas¶
/* Hover nos botões */
.complyr-btn {
transition: all 0.2s ease;
}
.complyr-btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.complyr-btn:active {
transform: translateY(0);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
}
/* Toggle switch animation */
.complyr-slider {
transition: background-color 0.3s ease;
}
.complyr-slider:before {
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
Boas Práticas de UX¶
1. Não Bloquear o Conteúdo¶
❌ Ruim (Cookie Wall):
/* NUNCA faça isso - ilegal pela LGPD Art. 9º, § 1º */
.site-content {
filter: blur(10px);
pointer-events: none;
}
.complyr-banner {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 99999;
}
✅ Bom:
/* Banner discreto que não impede navegação */
.complyr-banner {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
z-index: 9999;
/* Usuário pode rolar a página normalmente */
}
2. Botões Claros e Visíveis¶
Hierarquia Visual:
/* Botão primário (ação recomendada) */
.complyr-btn-accept {
background-color: #4CAF50;
color: #ffffff;
font-size: 16px;
font-weight: 600;
padding: 14px 28px;
}
/* Botão secundário */
.complyr-btn-customize {
background-color: #2196F3;
color: #ffffff;
font-size: 15px;
padding: 12px 24px;
}
/* Botão terciário (menos ênfase) */
.complyr-btn-reject {
background-color: transparent;
color: #f44336;
border: 2px solid #f44336;
font-size: 14px;
padding: 10px 20px;
}
3. Mensagem Concisa¶
✅ Bom:
<p>
Usamos cookies para melhorar sua experiência. Você pode aceitar todos,
rejeitar ou escolher individualmente.
<a href="/politica-privacidade">Saiba mais</a>
</p>
❌ Ruim (muito longo):
<p>
Este site utiliza cookies de acordo com a Lei Geral de Proteção de Dados
(LGPD - Lei 13.709/2018) e a Lei de Acesso à Informação (LAI - Lei 12.527/2011)
para coletar informações sobre como você interage conosco, incluindo, mas
não se limitando a, páginas visitadas, tempo de permanência, origem de tráfego,
dispositivo utilizado, sistema operacional, navegador, resolução de tela...
<!-- MUITO LONGO - usuários não vão ler -->
</p>
4. Link para Política de Privacidade¶
Sempre visível:
<div class="complyr-banner-content">
<p>
Usamos cookies para melhorar sua experiência.
<a href="/politica-privacidade" target="_blank" class="complyr-link">
Leia nossa Política de Privacidade
</a>
para mais informações.
</p>
</div>
5. Persistência de Escolhas¶
Salvar imediatamente:
// Salvar escolha assim que usuário clicar
document.getElementById('accept-all-btn').addEventListener('click', function() {
const consent = {
workspaceId: window.COMPLYR_WORKSPACE_ID,
purposes: {
essential: true,
analytics: true,
marketing: true,
personalization: true,
third_party: true
},
timestamp: new Date().toISOString()
};
// 1. Salvar localmente IMEDIATAMENTE
localStorage.setItem('complyr_consent_' + consent.workspaceId, JSON.stringify(consent));
// 2. Ocultar banner IMEDIATAMENTE (não esperar backend)
document.getElementById('complyr-banner').style.display = 'none';
// 3. Enviar para backend (assíncrono, não bloqueia UX)
fetch('https://app.complyr.com.br/api/consents', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(consent)
}).catch(err => console.error('Failed to sync consent:', err));
// 4. Recarregar página para ativar tags
location.reload();
});
Perguntas Frequentes¶
1. Posso mudar a posição do banner após implementação?¶
Resposta: SIM. A posição do banner é configurável via window.complyrConfig:
2. Como customizar as cores do banner para minha marca?¶
Resposta: Use CSS customizado para sobrescrever os estilos padrão:
<style>
/* Sobrescrever cores padrão */
.complyr-banner {
background-color: #1a1a1a !important; /* Sua cor de fundo */
color: #ffffff !important;
}
.complyr-btn-accept {
background-color: #ff6600 !important; /* Sua cor primária */
}
</style>
3. O banner funciona em todos os navegadores?¶
Resposta: SIM. O Complyr suporta: - ✅ Chrome/Edge (Chromium) - Últimas 2 versões - ✅ Firefox - Últimas 2 versões - ✅ Safari - Últimas 2 versões - ✅ Mobile browsers (iOS Safari, Chrome Android) - ⚠️ Internet Explorer 11 (suporte limitado)
4. Posso adicionar mais botões ao banner?¶
Resposta: Não recomendado. O design Layered otimiza para 3 botões: - Aceitar Todos - Rejeitar Todos - Gerenciar Preferências
Adicionar mais botões pode confundir usuários e reduzir taxa de conversão.
5. O banner aparece em todas as páginas?¶
Resposta: SIM, automaticamente. O script Complyr verifica localStorage em todas as páginas: - Se consentimento existe e é válido: Banner oculto - Se consentimento não existe ou expirou: Banner exibido
6. Posso ocultar o botão "Rejeitar Todos"?¶
Resposta: NÃO recomendado. A LGPD exige que o consentimento seja livre, o que significa que rejeitar deve ser tão fácil quanto aceitar. Ocultar "Rejeitar Todos" pode ser considerado "dark pattern" e viola boas práticas de UX e compliance.
7. Como testar o banner em diferentes idiomas?¶
Resposta: Configure o idioma via window.complyrConfig:
// Forçar inglês para testes
window.complyrConfig = {
language: 'en-US'
};
// Forçar português
window.complyrConfig = {
language: 'pt-BR'
};
8. O modal de preferências funciona offline?¶
Resposta: Parcialmente. O modal carrega e funciona offline, mas: - ✅ LocalStorage funciona (salva preferências localmente) - ❌ Envio para backend falha (tentará sincronizar quando online) - ✅ Preferências aplicadas imediatamente (tags bloqueadas/ativadas)
Recursos Relacionados¶
Documentação Técnica¶
- Gerenciamento de Consentimento - Sistema completo de consentimento
- Controle por Finalidade - 5 finalidades detalhadas
- Conformidade LGPD - Atendimento à legislação
- API JavaScript - Controle programático
Integrações¶
- Google Tag Manager - Integração GTM + Consent Mode v2
- Facebook Pixel - Gerenciamento automático
Exemplos Práticos¶
- Site E-commerce - Implementação completa com banner customizado
- Aplicação React - Banner em SPA
Próximos Passos¶
Agora que você entende os modos de banner, explore:
- Gerenciamento de Consentimento → - Como funciona o consentimento
- Guia Rápido → - Implemente o Complyr em 3 passos
- Customização → - Personalize cores e textos
- API JavaScript → - Controle programático do banner