1 2/* âââââââââââââââââââââââââââââââââââââââââââââââââââââââ 3 DATA â CLM Solutions Catalog 4 Source: https://clm.tech/en-solutions/ 5âââââââââââââââââââââââââââââââââââââââââââââââââââââââ */ 6const SOLUTIONS = [ 7 { 8 id:'adc', acronym:'ADC', 9 title:'Controladores de Entrega de Aplicações', 10 desc:'Melhore desempenho, segurança e eficiência de recursos além do balanceamento de carga básico â entregando funções de rede e segurança em escala.', 11 vendors:['F5','A10 Networks','NSFocus'], 12 challenges:['Desempenho de aplicações','Segurança web','Balanceamento de carga','Proteção contra DDoS'] 13 }, 14 { 15 id:'backup', acronym:'Backup', 16 title:'Backup e Recuperação', 17 desc:'Mantenha cópias seguras de dados crÃticos e restaure operações com mÃnima interrupção após ransomware, desastre ou crise prolongada.', 18 vendors:['Veeam','ExaGrid','HYCU'], 19 challenges:['Resiliência a ransomware','Continuidade de negócios','Recuperação de desastres','Proteção de dados'] 20 }, 21 { 22 id:'bas', acronym:'BAS', 23 title:'Simulação de Violação e Ataque', 24 desc:'Identifique proativamente vulnerabilidades e lacunas defensivas antes que adversários reais possam explorá-las.', 25 vendors:['Picus'], 26 challenges:['Security posture validation','Gestão de vulnerabilidades','Automação de red team'] 27 }, 28 { 29 id:'casb', acronym:'CASB', 30 title:'Agentes de Segurança de Acesso à Nuvem', 31 desc:'Posicione-se entre usuários e aplicações em nuvem para monitorar atividades, aplicar polÃticas de segurança e reduzir riscos.', 32 vendors:['Netskope','Skyhigh Security'], 33 challenges:['Segurança em nuvem','Visibilidade de SaaS','Shadow IT','Prevenção de perda de dados','Conformidade em nuvem'] 34 }, 35 { 36 id:'dspm', acronym:'DSPM', 37 title:'Gestão de Postura de Segurança de Dados', 38 desc:'Tenha uma visão clara de quão seguros são seus dados â da avaliação de riscos à aplicação de polÃticas de governança.', 39 vendors:['Netskope','Varonis'], 40 challenges:['Governança de dados','Avaliação de risco de dados','Descoberta de dados sensÃveis','Exposição de dados na nuvem'] 41 }, 42 { 43 id:'devsecops', acronym:'DevSecOps', 44 title:'DevSecOps', 45 desc:'Integre segurança em cada fase do ciclo de vida do desenvolvimento de software sem comprometer velocidade ou agilidade.', 46 vendors:['Zimperium'], 47 challenges:['Mobile app security','Desenvolvimento seguro','Segurança no SDLC','CI/CD security'] 48 }, 49 { 50 id:'edr', acronym:'EDR', 51 title:'Endpoint Detection and Response', 52 desc:'Detecte ameaças emergentes, previna ataques, apoie investigação e remediação, e habilite caça proativa a ameaças além do EPP.', 53 vendors:['SentinelOne'], 54 challenges:['Advanced threat detection','Resposta a incidentes','Caça a ameaças','Ataques zero-day','Ransomware'] 55 }, 56 { 57 id:'epp', acronym:'EPP', 58 title:'Endpoint Protection Platform', 59 desc:'Primeira linha de defesa crÃtica â detecte e bloqueie ameaças maliciosas no nÃvel do dispositivo usando indicadores de comprometimento.', 60 vendors:['SentinelOne'], 61 challenges:['Malware prevention','Segurança de endpoint','Proteção de dispositivos'] 62 }, 63 { 64 id:'iga', acronym:'IGA', 65 title:'Identity Governance and Administration', 66 desc:'Garanta que apenas indivÃduos autorizados tenham acesso à s informações certas no momento certo â fundamental para a segurança digital.', 67 vendors:['RSA','SailPoint','Delinea'], 68 challenges:['Governança de acesso','Compliance','Ciclo de vida de identidade','Privilégio mÃnimo','Audit'] 69 }, 70 { 71 id:'iam', acronym:'IAM', 72 title:'Identity Access Management', 73 desc:'Garanta que as pessoas certas tenham acesso autenticado aos recursos certos, no momento certo, suportando a postura de cibersegurança e conformidade.', 74 vendors:['Thales','F5','Delinea','RSA','Silverfort'], 75 challenges:['Segurança de identidade','Authentication','Controle de acesso','Zero Trust','Compliance'] 76 }, 77 { 78 id:'itdr', acronym:'ITDR', 79 title:'Identity Threat Detection and Response', 80 desc:'Proteja identidades digitais e dados sensÃveis contra ameaças com capacidades focadas de detecção e resposta.', 81 vendors:['ProofPoint','Vectra','Delinea','SentinelOne','Varonis','Silverfort'], 82 challenges:['Ataques de identidade','Roubo de conta','Roubo de credenciais','Ameaças internas'] 83 }, 84 { 85 id:'hci', acronym:'HCI',
86 title:'Hyperconverged Infrastructure', 87 desc:'Sistema unificado definido por software combinando armazenamento, computação, rede e gerenciamento em uma única solução escalável.', 88 vendors:['Nutanix'], 89 challenges:['Data center modernization','Consolidação de infraestrutura','Nuvem hÃbrida','Infraestrutura VDI'] 90 }, 91 { 92 id:'iot', acronym:'IoT/OT', 93 title:'IoT / OT / IoMT Security', 94 desc:'Proteja redes de dispositivos fÃsicos e industriais â de sensores IoT a sistemas OT que controlam equipamentos industriais e dispositivos de saúde.', 95 vendors:['Nozomi Networks','Forescout','Claroty','AppGate'], 96 challenges:['Segurança OT','Visibilidade IoT','Segurança industrial','Infraestrutura crÃtica','IoT na saúde'] 97 }, 98 { 99 id:'mfa', acronym:'MFA', 100 title:'Multi-Factor Authentication', 101 desc:'Adicione camadas extras de proteção para evitar acesso não autorizado mesmo quando senhas são comprometidas.', 102 vendors:['RSA','Delinea','Thales','Silverfort'], 103 challenges:['Segurança de autenticação','Prevenção de phishing','Acesso privilegiado','Zero Trust','Compliance'] 104 }, 105 { 106 id:'nac', acronym:'NAC', 107 title:'Controle de Acesso à Rede', 108 desc:'Aplique polÃticas para controlar o acesso à rede por dispositivos e usuários sem comprometer a produtividade.', 109 vendors:['Arista','Forescout'], 110 challenges:['Visibilidade de dispositivos','Segmentação de rede','Acesso Zero Trust','Segurança BYOD','Controle de IoT'] 111 }, 112 { 113 id:'ndr', acronym:'NDR', 114 title:'Detecção e Resposta de Rede', 115 desc:'Use análise comportamental e IA para detectar ameaças em redes de alta velocidade sem comprometer o desempenho.', 116 vendors:['Arista','Vectra','Hillstone Networks'], 117 challenges:['Visibilidade de rede','Movimentação lateral','Detecção de ameaças','Tráfego leste-oeste','SOC orientado por IA'] 118 }, 119 { 120 id:'npb', acronym:'NPB', 121 title:'Brokers de Pacotes de Rede', 122 desc:'Consolide monitoramento em tempo real, elimine pontos cegos e otimize ferramentas de segurança com dados de tráfego de rede de alta qualidade.', 123 vendors:['Arista','Gigamon'], 124 challenges:['Visibilidade de rede','Pontos cegos','Otimização de ferramentas','Monitoramento de tráfego','Tráfego criptografado'] 125 }, 126 { 127 id:'ngfw', acronym:'NGFW', 128 title:'Firewalls de Próxima Geração', 129 desc:'Evoluiu além dos firewalls tradicionais para entregar recursos poderosos de cibersegurança com controle significativamente maior e consciência de aplicações.', 130 vendors:['Arista','Hillstone Networks'], 131 challenges:['Segurança de perÃmetro','Controle de aplicações','Prevenção de ameaças','Segmentação de rede','Segurança leste-oeste'] 132 }, 133 { 134 id:'object', acronym:'S3', 135 title:'Object Storage (S3)', 136 desc:'Armazenamento distribuÃdo escalável de alto desempenho entregando um único namespace e pool para acesso paralelo de dados de alta largura de banda.', 137 vendors:['Zadara','Veeam','Lenovo'], 138 challenges:['Armazenamento em nuvem','Dados não estruturados','Destino de backup','Armazenamento de arquivo','Otimização de custos'] 139 }, 140 { 141 id:'pam', acronym:'PAM', 142 title:'Privileged Access Management', 143 desc:'Garanta que funções crÃticas de administradores e usuários privilegiados não sejam comprometidas â normalmente parte de uma estratégia IAM mais ampla.', 144 vendors:['Delinea'], 145 challenges:['Privileged accounts','Segurança administrativa','Cofre de credenciais','Privilégio mÃnimo','Zero Trust'] 146 }, 147 { 148 id:'encryption', acronym:'DPE', 149 title:'Data Protection and Encryption', 150 desc:'Criptografe dados sensÃveis em repouso, em trânsito ou ambos â garantindo que apenas usuários ou máquinas autorizados possam acessá-los.', 151 vendors:['Thales'], 152 challenges:['Data encryption','Gestão de chaves','Compliance','GDPR','Soberania de dados','HSM'] 153 }, 154 { 155 id:'rbi', acronym:'RBI', 156 title:'Remote Browser Isolation', 157 desc:'Separe a navegação do usuário de seu dispositivo executando conteúdo web em um servidor remoto â impedindo que código malicioso alcance os endpoints.', 158 vendors:['Parallels','ProofPoint','Skyhigh Security'], 159 challenges:['Segurança web','Exploits zero-day no browser','Segurança BYOD','Acesso de terceiros','Phishing'] 160 }, 161 { 162 id:'sase', acronym:'SASE', 163 title:'Borda de Serviço de Acesso Seguro', 164 desc:'Convirja SD-WAN e segurança de rede para identificar usuários e dispositivos, aplicar polÃticas e entregar acesso seguro com prioridade na nuvem.', 165 vendors:['Cato Networks','Netskope'], 166 challenges:['Força de trabalho remota','Conectividade de filiais','Zero Trust','Segurança cloud-first','Transformação de WAN'] 167 }, 168 { 169 id:'email', acronym:'SEG', 170 title:'Secure Email Gateways', 171 desc:'Proteja o vetor de ataque de maior risco â o e-mail â contra malware, phishing, anexos maliciosos e spam.', 172 vendors:['ProofPoint'], 173 challenges:['Phishing','Segurança de e-mail','BEC / Business email compromise','Entrega de malware','Entrega de ransomware'] 174 }, 175 { 176 id:'siem', acronym:'SIEM', 177 title:'Gestão de Informações e Eventos de Segurança', 178 desc:'Colete e analise dados de segurança em escala, gerando insights priorizados em tempo real e relatórios de conformidade para equipes de segurança.', 179 vendors:['SentinelOne','Aiuken'], 180 challenges:['Operações de SOC','Gestão de logs','Relatórios de conformidade','Correlação de ameaças','Fadiga de alertas'] 181 }, 182 { 183 id:'soar', acronym:'SOAR', 184 title:'Orquestração, Automação e Resposta de Segurança', 185 desc:'Responda a ameaças e incidentes com pouca ou nenhuma intervenção humana â liberando equipes para focar em tarefas de alto julgamento.', 186 vendors:['Aiuken'], 187 challenges:['SOC automation','Resposta a incidentes','Triagem de alertas','Automação de playbooks','Redução de MTTR'] 188 }, 189 { 190 id:'sse', acronym:'SSE', 191 title:'Security Service Edge', 192 desc:'Plataforma baseada em nuvem integrando SWG, ZTNA, CASB e FWaaS em um único serviço de segurança para organizações cloud-first.', 193 vendors:['Netskope','Skyhigh Security','Cato Networks'], 194 challenges:['Zero Trust','Segurança em nuvem','Acesso remoto','Proteção de SaaS','Estratégia SASE'] 195 }, 196 { 197 id:'sdn', acronym:'SDN', 198 title:'Software-Defined Networking', 199 desc:'Gerencie e controle redes por software para maior flexibilidade, automação e c
199ontrole centralizado.', 200 vendors:['Arista'], 201 challenges:['Network automation','Rede de data center','Agilidade de rede','Rede pronta para nuvem'] 202 }, 203 { 204 id:'sdwan', acronym:'SD-WAN', 205 title:'WAN Definida por Software', 206 desc:'Seleção dinâmica de caminho de aplicação baseada em polÃticas em conexões WAN â cada vez mais crÃtica à medida que serviços migram para a borda.', 207 vendors:['Arista','Cato Networks','Netskope','Hillstone Networks'], 208 challenges:['Conectividade de filiais','Otimização de WAN','Migração para nuvem','Substituição de MPLS','Resiliência de rede'] 209 }, 210 { 211 id:'token', acronym:'Token', 212 title:'Tokenization', 213 desc:'Substitua dados sensÃveis por tokens â sÃmbolos de identificação sem valor explorável ou informações confidenciais.', 214 vendors:['Thales'], 215 challenges:['PCI DSS compliance','Segurança de pagamentos','Mascaramento de dados','Proteção de dados sensÃveis'] 216 }, 217 { 218 id:'uem', acronym:'UEM', 219 title:'Unified Endpoint Management', 220 desc:'Gerencie, monitore e proteja todos os dispositivos da organização â a evolução do MDM e EMM.', 221 vendors:['Hexnode'], 222 challenges:['Mobile device management','PolÃtica BYOD','Conformidade de dispositivos','Endpoints de trabalhadores remotos'] 223 }, 224 { 225 id:'ueba', acronym:'UEBA', 226 title:'Análise de Comportamento de Usuários e Entidades', 227 desc:'Construa perfis comportamentais de linha de base e sinalize atividades anômalas para descobrir ameaças internas e ataques ocultos.', 228 vendors:['Varonis','Skyhigh Security'], 229 challenges:['Ameaças internas','Anomalias comportamentais','Exfiltração de dados','Pontuação de risco do usuário'] 230 }, 231 { 232 id:'asv', acronym:'ASV', 233 title:'Automated Security Validation', 234 desc:'Valide continuamente controles de segurança por meio de validação de exposição, testes de penetração e verificação de conformidade.', 235 vendors:['Pentera'], 236 challenges:['Continuous security testing','Automação de pentest','Eficácia dos controles de segurança','Gestão de exposição'] 237 }, 238 { 239 id:'vdi', acronym:'VDI', 240 title:'Virtual Desktop Infrastructure', 241 desc:'Permita que usuários acessem remotamente sistemas corporativos de forma segura a partir de qualquer dispositivo.', 242 vendors:['Parallels','Dizzion'], 243 challenges:['Trabalho remoto','Desktops virtuais','Desktop como Serviço','BYOD','Acesso remoto seguro'] 244 }, 245 { 246 id:'waap', acronym:'WAAP', 247 title:'Proteção de Aplicações Web e APIs', 248 desc:'Proteja aplicações web e APIs de ataques cibernéticos â uma evolução do WAF tradicional com cobertura mais ampla.', 249 vendors:['F5','Akamai','Imperva','Thales'], 250 challenges:['Segurança de APIs','Ataques a aplicações web','Gestão de bots','Mitigação de DDoS','Segurança de aplicações'] 251 }, 252 { 253 id:'waf', acronym:'WAF', 254 title:'Web Application Firewall', 255 desc:'Proteja aplicações web de ataques de lógica de negócios, injeção SQL, XSS, fraude e outras ameaças web.', 256 vendors:['F5','Akamai','Hillstone Networks','Imperva','Thales'], 257 challenges:['Segurança de aplicações web','OWASP Top 10','Proteção de APIs','Prevenção de bots','Compliance'] 258 }, 259 { 260 id:'imperva-waf', acronym:'WAF+', 261 title:'Web Application Firewall (Thales | Imperva)', 262 desc:'WAF lÃder de mercado da Imperva, agora parte da Thales â protegendo aplicações e APIs contra OWASP Top 10, ataques de lógica de negócios, SQL injection, XSS, fraude e ameaças zero-day em ambientes cloud, on-premises e hÃbridos.', 263 vendors:['Thales'], 264 challenges:['Segurança de aplicações web','OWASP Top 10','Proteção de APIs','Segurança de aplicações em nuvem','WAF hÃbrido','Exploits zero-day'] 265 }, 266 { 267 id:'imperva-ddos', acronym:'DDoS', 268 title:'DDoS Protection (Thales | Imperva)', 269 desc:'Mitigação de DDoS da Imperva, agora sob a Thales â defesa contra ataques volumétricos para redes, aplicações e DNS com scrubbing contÃnuo e detecção em menos de um segundo em escala global.', 270 vendors:['Thales'], 271 challenges:['Mitigação de DDoS','Ataques volumétricos','Disponibilidade de aplicações','Proteção de DNS','Resiliência de rede'] 272 }, 273 { 274 id:'imperva-api', acronym:'APIS', 275 title:'API Security (Thales | Imperva)', 276 desc:'Descubra, monitore e proteja todos os endpoints de API â detectando abuso, vazamento de dados e APIs ocultas. Parte do portfólio de segurança de aplicações da Thales herdado da Imperva.', 277 vendors:['Thales'], 278 challenges:['Segurança de APIs','Descoberta de APIs','Vazamento de dados via API','APIs ocultas','Segurança de aplicações'] 279 }, 280 { 281 id:'imperva-bot', acronym:'ABP', 282 title:'Advanced Bot Protection (Thales | Imperva)',
283 desc:'Combata bots maliciosos, fraude online, credential stuffing e ataques de roubo de conta â protegendo aplicações web e mobile enquanto permite tráfego legÃtimo.', 284 vendors:['Thales'], 285 challenges:['Gestão de bots','Roubo de conta','Credential stuffing','Fraude online','Web scraping'] 286 }, 287 { 288 id:'imperva-dsf', acronym:'DSF', 289 title:'Data Security Fabric (Thales | Imperva)', 290 desc:'Imperva Data Security Fabric â segurança de dados unificada para dados estruturados e não estruturados, bancos de dados on-premises e em nuvem. Análise de risco, monitoramento de atividade e descoberta de dados sensÃveis em escala.', 291 vendors:['Thales'], 292 challenges:['Data security','Monitoramento de atividade de banco de dados','Descoberta de dados sensÃveis','Proteção de dados na nuvem','Conformidade de dados','Visibilidade de risco de dados'] 293 }, 294 { 295 id:'imperva-rasp', acronym:'RASP', 296 title:'Runtime Application Self-Protection (Thales | Imperva)', 297 desc:'RASP protege aplicações por dentro â detectando e bloqueando ataques em tempo real sem alterar o código-fonte, independentemente dos controles de perÃmetro de rede.', 298 vendors:['Thales'], 299 challenges:['Segurança de aplicações','Exploits zero-day','Cadeia de fornecimento de software segura','DevSecOps','Proteção em tempo de execução'] 300 }, 301 { 302 id:'halcyon', acronym:'ARP', 303 title:'Anti-Ransomware Platform', 304 desc:'A única plataforma criada especificamente para derrotar ransomware de ponta a ponta. Combina prevenção pré-execução com IA/ML, disrupção comportamental, técnicas de deception, captura de chaves de criptografia e recuperação automatizada.', 305 vendors:['Halcyon'], 306 challenges:['Resiliência a ransomware','Prevenção de ransomware','Recuperação de ransomware','Continuidade de negócios','Segurança de endpoint','Resiliência cibernética','Prevenção de extorsão de dados'] 307 }, 308 { 309 id:'lan', acronym:'LAN', 310 title:'Wired & Wireless LAN Access', 311 desc:'Acesso a rede de campus e filial cabeada e sem fio de alto desempenho e seguro, com gerenciamento unificado e aplicação de polÃticas.', 312 vendors:['Arista'], 313 challenges:['Rede de campus','Segurança Wi-Fi','Acesso à rede','Infraestrutura de filial'] 314 }, 315 { 316 id:'ztna', acronym:'ZTNA', 317 title:'Acesso à Rede Zero Trust', 318 vendors:['Netskope','Cato Networks','AppGate'], 319 challenges:['Zero Trust','Trabalho remoto','Acesso seguro','Privilégio mÃnimo','Microsegmentation'], 320 desc:'PerÃmetro definido por software e acesso centrado em identidade â usuários acessam apenas recursos autorizados, nunca a rede inteira.', 321 }, 322 { 323 id:'cps', acronym:'CPS', 324 title:'Cyber-Physical Systems Protection', 325 vendors:['Claroty','Nozomi Networks','Forescout'], 326 challenges:['Segurança OT','Segurança IoT','Segurança industrial','Infraestrutura crÃtica','Visibilidade de ativos'], 327 desc:'Proteção abrangente para OT, IoT industrial e dispositivos médicos conectados â descoberta de ativos, gestão de exposição e detecção de ameaças. LÃder no Gartner MQ 2026.', 328 }, 329 { 330 id:'mft', acronym:'MFT', 331 title:'Managed File Transfer', 332 vendors:['Progress Software'], 333 challenges:['Compliance','Governança de dados','Compartilhamento seguro de arquivos','Trilhas de auditoria','Automation'], 334 desc:'Fluxos de transferência de arquivos seguros, automatizados e em conformidade com registro de auditoria completo â MOVEit, WhatsUp Gold, Flowmon NDR e Kemp LoadMaster ADC.', 335 }, 336 { 337 id:'nspm', acronym:'NSPM', 338 title:'Network Security Policy Management', 339 vendors:['AlgoSec'], 340 challenges:['Firewall management','Compliance','Segmentação de rede','Gestão de mudanças','Zero Trust'], 341 desc:'Automatize o gerenciamento de polÃticas de firewall, visibilidade de conectividade de aplicações e relatórios de conformidade em ambientes hÃbridos e multi-cloud.', 342 }, 343 { 344 id:'wanopt', acronym:'WAN', 345 title:'WAN Optimization & Observability', 346 vendors:['Riverbed'], 347 challenges:['WAN performance','Entrega de aplicações','Monitoramento de rede','Experiência digital','Trabalho hÃbrido'], 348 desc:'Otimização de WAN, SD-WAN e monitoramento de experiência digital para acelerar o desempenho de aplicações em empresas distribuÃdas.', 349 }, 350]; 351 352/* ââ Vendor metadata ââââââââââââââââââââââââââââââââââââ */ 353const VENDORS = {
354 'A10 Networks': { color:'#00843D', desc:'Controladores de entrega de aplicações, proteção DDoS e balanceamento de carga para data centers e nuvem.' }, 355 'Aiuken': { color:'#003087', desc:'Serviços gerenciados de SOC com SIEM, SOAR e inteligência de ameaças 24x7 para empresas da América Latina.' }, 356 'Akamai': { color:'#009BDE', desc:'Segurança em nuvem, CDN, WAF, proteção DDoS e WAAP em escala global.' }, 357 'AlgoSec': { color:'#E4002B', desc:'Gerenciamento de polÃticas de segurança de rede, automação de firewall e conectividade de aplicações.' }, 358 'AppGate': { color:'#003366', desc:'Acesso à Rede de Zero Trust (ZTNA) e PerÃmetro Definido por Software para ambientes hÃbridos e OT.' }, 359 'Arista': { color:'#56B7E6', desc:'Rede em nuvem â switching, roteamento, NDR, NAC, SDN e SD-WAN.' }, 360 'Cato Networks': { color:'#00BF6F', desc:'Plataforma SASE â SD-WAN, SSE e Zero Trust em um único serviço cloud-native.' }, 361 'Claroty': { color:'#004B87', desc:'Proteção de sistemas ciberfÃsicos (CPS) â visibilidade de ativos, gestão de exposição, proteção de rede e detecção de ameaças para OT, IoT e IoMT. LÃder no Gartner MQ 2026.' }, 362 'Delinea': { color:'#E4002B', desc:'Gestão de acesso privilegiado (PAM) e segurança de identidade para ambientes corporativos.' }, 363 'Dizzion': { color:'#0057B8', desc:'Desktop como Serviço (DaaS) para trabalho remoto seguro em qualquer dispositivo.' }, 364 'ExaGrid': { color:'#E4002B', desc:'Armazenamento de backup em camadas com appliances de deduplicação e recuperação de ransomware.' }, 365 'F5': { color:'#e30000', desc:'Entrega de aplicações, segurança multi-cloud e soluções de segurança de APIs.' }, 366 'Forescout': { color:'#E31B23', desc:'Visibilidade de dispositivos e segmentação zero-trust para ambientes de TI, OT e IoT.' }, 367 'Gigamon': { color:'#E4002B', desc:'Pipeline de observabilidade profunda e visibilidade de rede para ferramentas de segurança e operações.' }, 368 'Halcyon': { color:'#FF6B00', desc:'Plataforma Anti-Ransomware criada especificamente â prevenção com IA/ML, disrupção comportamental,
368captura de chaves de criptografia e recuperação rápida. Fortune Cyber 60 por três anos consecutivos.' }, 369 'Hexnode': { color:'#E4002B', desc:'Gerenciamento unificado de endpoints e dispositivos móveis (UEM/MDM) pela Mitsogo â iOS, Android, Windows, macOS.' }, 370 'Hillstone Networks':{ color:'#E4002B', desc:'NGFW, NDR, WAF e SD-WAN para redes empresariais hÃbridas e de nÃvel de operadora.' }, 371 'HYCU': { color:'#00A3E0', desc:'Backup e recuperação criados especificamente para cargas de trabalho cloud-native, SaaS e hÃbridas.' }, 372 'Imperva': { color:'#004990', desc:'WAF, mitigação de DDoS, segurança de APIs, proteção contra bots, RASP e data security fabric.' }, 373 'Lenovo': { color:'#E01E26', desc:'Servidores corporativos, storage (ThinkSystem) e infraestrutura HCI para data centers.' }, 374 'Netskope': { color:'#BF1B3E', desc:'LÃder em SSE â SWG, CASB, ZTNA e DLP unificados em uma plataforma cloud-native.' }, 375 'NSFocus': { color:'#005BAC', desc:'Mitigação de DDoS, WAF e soluções de segurança de rede para operadoras e empresas.' }, 376 'Nozomi Networks': { color:'#0050A0', desc:'Segurança OT e IoT â visibilidade de ativos, detecção de ameaças e detecção de anomalias para ambientes industriais.' }, 377 'Nutanix': { color:'#024DA1', desc:'Infraestrutura hiperconvergente (HCI) e plataforma multi-cloud hÃbrida.' }, 378 'Parallels': { color:'#ED1C24', desc:'Infraestrutura de desktop virtual (VDI) e isolamento remoto de navegador (RBI).' }, 379 'Pentera': { color:'#0E1C4E', desc:'Validação automatizada de segurança e testes de penetração contÃnuos.' }, 380 'Picus': { color:'#E4002B', desc:'Simulação de violação e ataque (BAS) para validação contÃnua de controles de segurança.' }, 381 'Progress Software': { color:'#5C2D91', desc:'Kemp LoadMaster ADC, Flowmon NDR, WhatsUp Gold monitoramento de rede e MOVEit transferência segura de arquivos.' }, 382 'ProofPoint': { color:'#002060', desc:'Segurança de e-mail, ameaças internas, isolamento remoto de navegador e inteligência de ameaças.' }, 383 'Rimini Street': { color:'#003087', desc:'Suporte independente de software empresarial e serviços gerenciados para Oracle, SAP e outras plataformas.' }, 384 'Riverbed': { color:'#00205B', desc:'Otimização de WAN, SD-WAN, gerenciamento de desempenho de rede e monitoramento de experiência digital.' }, 385 'RSA': { color:'#E60000', desc:'Garantia de identidade e acesso â MFA, IGA e autenticação baseada em risco.' }, 386 'SailPoint': { color:'#002A70', desc:'Governança e administração de identidades (IGA) em escala corporativa.' }, 387 'SentinelOne': { color:'#6E1FFF', desc:'EDR, EPP, SIEM, XDR e proteção de identidade contra ameaças com IA.' }, 388 'Silverfort': { color:'#1A237E', desc:'Proteção unificada de identidade e MFA adaptativo para todos os usuários e recursos â sem agente.' }, 389 'Skyhigh Security': { color:'#00A4E4', desc:'Plataforma SSE cloud-native com CASB, SWG, DLP e isolamento remoto de navegador.' }, 390 'Thales': { color:'#E4002B', desc:'LÃder global em cibersegurança â criptografia de dados, HSM, gestão de chaves e tokenização.' }, 391 'Varonis': { color:'#003087', desc:'Segurança de dados, UEBA e DSPM para armazenamentos de dados on-premises e em nuvem.' }, 392 'Vectra': { color:'#003087', desc:'NDR e ITDR com IA para ambientes hÃbridos, multi-cloud e de identidade.' }, 393 'Veeam': { color:'#00B336', desc:'Proteção de dados moderna, backup, replicação e recuperação para qualquer nuvem.' }, 394 'Viewtinet': { color:'#0057A8', desc:'Visibilidade de rede, monitoramento de SD-WAN e soluções de gerenciamento de desempenho.' }, 395 'Zadara': { color:'#0057A8', desc:'Armazenamento empresarial cloud-native â block, file e object (S3) como serviço.' }, 396 'Zimperium': { color:'#6B4FBB', desc:'Defesa contra ameaças móveis (MTD) e segurança de aplicações móveis para apps corporativos.' }, 397}; 398 399/* ââ All unique challenges ââââââââââââââââââââââââââââââ */ 400const ALL_CHALLENGES = [...new Set(SOLUTIONS.flatMap(s => s.challenges))].sort(); 401const ALL_VENDORS = [...new Set(SOLUTIONS.flatMap(s => s.vendors))].sort(); 402 403/* ââ State âââââââââââââââââââââââââââââââââââââââââââââââ */ 404let activeVendors = new Set(); 405let activeChallenges = new Set(); 406let sortMode = 'alpha'; 407 408/* ââ Init âââââââââââââââââââââââââââââââââââââââââââââââââ */
409function init() { 410 // Build vendor chips 411 const vc = document.getElementById('vendor-chips'); 412 vc.innerHTML = ALL_VENDORS.map(v => { 413 const color = VENDORS[v]?.color || '#575756'; 414 return `<span class="f-chip" data-vendor="${v}" 415 onclick="toggleVendor('${v}',this)" 416 style="--vc:${color}">${v}</span>`; 417 }).join(''); 418 419 // Build challenge list 420 const cl = document.getElementById('challenge-list'); 421 cl.innerHTML = ALL_CHALLENGES.map(c => 422 `<div class="c-chip" data-challenge="${c}" onclick="toggleChallenge('${c}',this)"> 423 <span class="c-chip-dot"></span> 424 <span class="c-chip-text">${c}</span> 425 </div>` 426 ).join(''); 427 428 applyFilters(); 429} 430 431function toggleVendor(v, el) { 432 activeVendors.has(v) ? activeVendors.delete(v) : activeVendors.add(v); 433 el.classList.toggle('active'); 434 applyFilters(); 435} 436function toggleChallenge(c, el) { 437 activeChallenges.has(c) ? activeChallenges.delete(c) : activeChallenges.add(c); 438 el.classList.toggle('active'); 439 applyFilters(); 440} 441function clearVendors() { activeVendors.clear(); document.querySelectorAll('.f-chip').forEach(e=>e.classList.remove('active')); applyFilters(); } 442function clearChallenges() { activeChallenges.clear(); document.querySelectorAll('.c-chip').forEach(e=>e.classList.remove('active')); applyFilters(); } 443function setSort(mode, el) { sortMode=mode; document.querySelectorAll('.sort-btn').forEach(b=>b.classList.remove('active')); el.classList.add('active'); applyFilters(); } 444 445/* ââ Filter & render âââââââââââââââââââââââââââââââââââ */ 446function applyFilters() { 447 const q = document.getElementById('search-inp').value.toLowerCase(); 448 449 let results = SOLUTIONS.filter(s => { 450 // Buscar filter 451 if (q) { 452 const hay = [s.title, s.acronym, s.desc, ...s.vendors, ...s.challenges].join(' ').toLowerCase(); 453 if (!hay.includes(q)) return false; 454 } 455 // Vendor filter 456 if (activeVendors.size > 0) { 457 if (!s.vendors.some(v => activeVendors.has(v))) return false; 458 } 459 // Challenge filter 460 if (activeChallenges.size > 0) { 461 if (![...activeChallenges].some(c => s.challenges.includes(c))) return false; 462 } 463 return true; 464 }); 465 466 // Score by challenge matches 467 results = results.map(s => ({ 468 ...s, 469 matchScore: activeChallenges.size > 0 470 ? [...activeChallenges].filter(c => s.challenges.includes(c)).length 471 : 0 472 })); 473 474 // Sort 475 if (sortMode === 'alpha') results.sort((a,b) => a.title.localeCompare(b.title)); 476 if (sortMode === 'vendors') results.sort((a,b) => b.vendors.length - a.vendors.length); 477 if (sortMode === 'match') results.sort((a,b) => b.matchScore - a.matchScore || a.title.localeCompare(b.title)); 478 479 const grid = document.getElementById('cards-grid'); 480 const count = document.getElementById('results-count'); 481 count.innerHTML = `Showing <strong>${results.length}</strong> of ${SOLUTIONS.length} solutions`; 482 483 if (!results.length) { 484 grid.innerHTML = `<div class="empty"> 485 <div class="empty-icon">ð</div> 486 <div class="empty-title">No solutions match your filters</div> 487 <div class="empty-sub">Try adjusting the vendor, challenge, or search term</div> 488 </div>`; 489 return; 490 } 491 492 const badgeLabels = {req:'Obrigatório',rec:'Recomendado',opt:'Opcional'}; 493 494 grid.innerHTML = results.map(s => { 495 const isHighlight = s.matchScore > 0; 496 const matchTxt = s.matchScore > 0 497 ? `<span class="match-score">â ${s.matchScore} challenge match${s.matchScore>1?'es':''}</span>` 498 : ''; 499 const vendorBadges = s.vendors.map(v => 500 `<span class="vendor-badge ${activeVendors.has(v)?'sel':''}" 501 onclick="event.stopPropagation();openVendorModal('${v}')">${v}</span>` 502 ).join(''); 503 const challengeTags = s.challenges.slice(0,3).map(c => 504 `<span class="c-tag">${c}</span>` 505 ).join(''); 506 507 return `<div class="sol-card ${isHighlight?'highlight':''}" onclick="openSolutionModal('${s.id}')"> 508 <div class="card-head"> 509 <div class="card-title">${s.title}</div> 510 <span class="card-acronym">${s.acronym}</span> 511 </div> 512 <div class="card-desc">${s.desc}</div> 513 <div class="card-vendors">${vendorBadges}</div> 514 <div class="card-footer"> 515 <div class="challenge-tags">${challengeTags}${s.challenges.length>3?`<span class="c-tag">+${s.challenges.length-3}</span>`:''}</div> 516 ${matchTxt} 517 </div> 518 </div>`; 519 }).join(''); 520} 521 522/* ââ Modals ââââââââââââââââââââââââââââââââââââââââââââ */ 523function openSolutionModal(id) { 524 const s = SOLUTIONS.find(x => x.id === id); 525 if (!s) return; 526 document.getElementById('modal-vendor-name').textContent = s.title; 527 document.getElementById('modal-vendor-sub').textContent = `${s.acronym} · ${s.vendors.length} vendor${s.vendors.length>1?'s':''}`; 528 const body = document.getElementById('modal-body'); 529 body.innerHTML = ` 530 <div class="modal-section"> 531 <div class="modal-section-label">What does it do?</div> 532 <p style="font-size:13px;color:var(--muted);line-height:1.7">${s.desc}</p> 533 </div> 534 <div class="modal-section"> 535 <div class="modal-section-label">CLM Vendors for this solution (${s.vendors.length})</div> 536 <div> 537 ${s.vendors.map(v => { 538 const info = VENDORS[v] || {}; 539 return `<div style="display:flex;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--bord)"> 540 <div style="width:10px;height:10px;border-radius:50%;background:${info.color||'#575756'};margin-top:4px;flex-shrink:0"></div> 541 <div style="flex:1"> 542 <div style="font-size:13px;font-weight:700;color:var(--navy);margin-bottom:2px">${v}</div> 543 <div style="font-size:12px;color:var(--hint);line-height:1.5">${info.desc||''}</div> 544 </div> 545 <button class="btn btn-outline btn-sm" onclick="openVendorModal('${v}')">View all ${v} solutions â</button> 546 </div>`; 547 }).join('')} 548 </div> 549 </div> 550 <div class="modal-section"> 551 <div class="modal-section-label">Business challenges addressed (${s.challenges.length})</div> 552 <div style="display:flex;flex-wrap:wrap;gap:6px;margin-top:2px"> 553 ${s.challenges.map(c => 554 `<span class="sol-pill" onclick="closeModal();filterByChallenge('${c}')">
555 <span class="sol-pill-dot" style="background:var(--red)"></span>${c} 556 </span>` 557 ).join('')} 558 </div> 559 </div>`; 560 document.getElementById('vendor-modal').style.display = 'flex'; 561 document.body.style.overflow = 'hidden'; 562} 563 564function openVendorModal(vendorName) { 565 const info = VENDORS[vendorName] || {}; 566 const solutions = SOLUTIONS.filter(s => s.vendors.includes(vendorName)); 567 document.getElementById('modal-vendor-name').textContent = vendorName; 568 document.getElementById('modal-vendor-sub').textContent = 569 `${solutions.length} solution${solutions.length>1?'s':''} · CLM Value Added Distributor`; 570 const body = document.getElementById('modal-body'); 571 body.innerHTML = ` 572 <div class="modal-section"> 573 <div class="modal-section-label">About ${vendorName}</div> 574 <p style="font-size:13px;color:var(--muted);line-height:1.7">${info.desc||'Parceiro vendor CLM.'}</p> 575 </div> 576 <div class="modal-section"> 577 <div class="modal-section-label">Solutions covered by ${vendorName}</div> 578 <div> 579 ${solutions.map(s => ` 580 <div style="display:flex;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--bord);cursor:pointer" 581 onclick="closeModal();setTimeout(()=>openSolutionModal('${s.id}'),150)"> 582 <span style="font-size:9px;font-weight:800;padding:3px 7px;border-radius:3px;background:var(--nav-l);color:var(--navy);margin-top:1px;white-space:nowrap">${s.acronym}</span> 583 <div style="flex:1"> 584 <div style="font-size:13px;font-weight:600;color:var(--navy);margin-bottom:2px">${s.title}</div> 585 <div style="font-size:12px;color:var(--hint);line-height:1.5">${s.desc.substring(0,100)}â¦</div> 586 <div style="display:flex;flex-wrap:wrap;gap:4px;margin-top:6px"> 587 ${s.challenges.slice(0,4).map(c=>`<span class="c-tag">${c}</span>`).join('')} 588 </div> 589 </div> 590 </div>`).join('')} 591 </div> 592 </div> 593 <div class="modal-section"> 594 <div class="modal-section-label">Filter results by ${vendorName}</div> 595 <button class="btn btn-red btn-sm" onclick="closeModal();filterByVendor('${vendorName}')"> 596 Show only ${vendorName} solutions â 597 </button> 598 </div>`; 599 document.getElementById('vendor-modal').style.display = 'flex'; 600 document.body.style.overflow = 'hidden'; 601} 602 603function closeModal() { 604 document.getElementById('vendor-modal').style.display = 'none'; 605 document.body.style.overflow = ''; 606} 607 608function filterByVendor(v) { 609 clearVendors(); 610 activeVendors.add(v); 611 document.querySelector(`.f-chip[data-vendor="${v}"]`)?.classList.add('active'); 612 applyFilters(); 613} 614 615function filterByChallenge(c) { 616 activeChallenges.add(c); 617 document.querySelector(`.c-chip[data-challenge="${c}"]`)?.classList.add('active'); 618 applyFilters(); 619} 620 621// Keyboard: Escape closes modal 622document.addEventListener('keydown', e => { if(e.key==='Escape') closeModal(); }); 623 624init(); 625 626/* ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 627 QUIZ DE DIAGNÃSTICO â CLM Vendor Finder 628 BilÃngue PT / ES · 8 perguntas adaptativas · resultado com vendors + soluções 629ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */ 630 631const QUIZ_I18N = { 632 pt: { 633 title: 'ð¯ Quiz de Diagnóstico', 634 sub: 'CLM â Encontre a solução certa', 635 langQ: 'Escolha o idioma / Seleccione el idioma', 636 back: 'â Voltar', 637 next: 'Próxima â', 638 finish: 'Ver resultado', 639 restart: 'ð Refazer o quiz', 640 resultTitle:'Soluções recomendadas para o seu cenário', 641 resultSub: 'Com base nas suas respostas, estes são os fabricantes CLM mais indicados:', 642 noResult: 'Nenhuma solução encontrada para este cenário. Fale com nosso time de pré-vendas.', 643 }, 644 es: { 645 title: 'ð¯ Quiz de Diagnóstico', 646 sub: 'CLM â Encuentre la solución correcta', 647 langQ: 'Escolha o idioma / Seleccione el idioma', 648 back: 'â Volver', 649 next: 'Siguiente â', 650 finish: 'Ver resultado', 651 restart: 'ð Repetir el quiz', 652 resultTitle:'Soluciones recomendadas para su escenario', 653 resultSub: 'Según sus respuestas, estos son los fabricantes CLM más recomendados:', 654 noResult: 'No se encontraron soluciones para este escenario. Hable con nuestro equipo.', 655 }, 656}; 657 658// Perguntas bilÃngues â cada resposta pontua um array de vendors 659const QUIZ_QUESTIONS = [ 660 { 661 id: 'env', 662 pt: { q: 'Qual é o ambiente principal do cliente?', sub: 'Escolha o que melhor descreve a infraestrutura.' }, 663 es: { q: '¿Cuál es el entorno principal del cliente?', sub: 'Elija el que mejor describe la infraestructura.' }, 664 options: [ 665 { pt:'Corporativo â escritórios e usuários remotos', es:'Corporativo â oficinas y usuarios remotos', 666 icon:'ð¢', tags:['corp'] }, 667 { pt:'Industrial / OT â fábricas, utilities, infraestrutura crÃtica', es:'Industrial / OT â fábricas, utilities, infraestructura crÃtica', 668 icon:'ð', tags:['ot'] }, 669 { pt:'Data Center / Nuvem', es:'Centro de Datos / Nube', 670 icon:'âï¸', tags:['dc'] }, 671 { pt:'HÃbrido â todos os ambientes acima', es:'HÃbrido â todos los entornos anteriores', 672 icon:'ð', tags:['corp','ot','dc'] }, 673 ] 674 }, 675 { 676 id: 'pain', 677 pt: { q: 'Qual é o maior problema que o cliente quer resolver?', sub: 'Selecione a área de maior dor.' }, 678 es: { q: '¿Cuál es el mayor problema que el cliente quiere resolver?', sub: 'Seleccione el área de mayor dolor.' }, 679 options: [ 680 { pt:'Identidade e acesso â quem pode acessar o quê', es:'Identidad y acceso â quién puede acceder a qué', 681 icon:'ð', tags:['identity'] },
682 { pt:'Proteção de dados â vazamento, ransomware, backup', es:'Protección de datos â filtración, ransomware, respaldo', 683 icon:'ð¡ï¸', tags:['data'] }, 684 { pt:'Visibilidade de rede â o que está acontecendo na rede', es:'Visibilidad de red â qué está pasando en la red', 685 icon:'ðï¸', tags:['network'] }, 686 { pt:'Segurança de endpoints e mobile', es:'Seguridad de endpoints y móviles', 687 icon:'ð»', tags:['endpoint'] }, 688 { pt:'Compliance, auditoria e governança', es:'Cumplimiento, auditorÃa y gobernanza', 689 icon:'ð', tags:['compliance'] }, 690 { pt:'Performance e entrega de aplicações', es:'Rendimiento y entrega de aplicaciones', 691 icon:'â¡', tags:['perf'] }, 692 ] 693 }, 694 { 695 id: 'users', 696 pt: { q: 'Quantos usuários / dispositivos estão no escopo?', sub: 'Estimativa aproximada é suficiente.' }, 697 es: { q: '¿Cuántos usuarios / dispositivos están en el alcance?', sub: 'Una estimación aproximada es suficiente.' }, 698 options: [ 699 { pt:'Até 500', es:'Hasta 500', icon:'ð¥', tags:['smb'] }, 700 { pt:'500 a 5.000', es:'500 a 5.000', icon:'ð¬', tags:['mid'] }, 701 { pt:'Mais de 5.000', es:'Más de 5.000', icon:'ð', tags:['ent'] }, 702 ] 703 }, 704 { 705 id: 'cloud', 706 pt: { q: 'Qual é a estratégia de nuvem do cliente?', sub: '' }, 707 es: { q: '¿Cuál es la estrategia de nube del cliente?', sub: '' }, 708 options: [ 709 { pt:'On-premises â tudo no data center próprio', es:'On-premises â todo en el data center propio', 710 icon:'ð¥ï¸', tags:['onprem'] }, 711 { pt:'Cloud-first â principalmente AWS, Azure ou GCP', es:'Cloud-first â principalmente AWS, Azure o GCP', 712 icon:'âï¸', tags:['cloud'] }, 713 { pt:'HÃbrido â on-prem e nuvem combinados', es:'HÃbrido â on-prem y nube combinados', 714 icon:'ð', tags:['onprem','cloud'] }, 715 { pt:'SaaS â praticamente tudo como serviço', es:'SaaS â prácticamente todo como servicio', 716 icon:'ð¦', tags:['cloud','saas'] }, 717 ] 718 }, 719 { 720 id: 'threat', 721 pt: { q: 'Qual ameaça o cliente mais teme?', sub: 'Escolha a que gera mais urgência.' }, 722 es: { q: '¿Qué amenaza le preocupa más al cliente?', sub: 'Elija la que genera más urgencia.' }, 723 options: [ 724 { pt:'Ransomware e sequestro de dados', es:'Ransomware y secuestro de datos', 725 icon:'ð', tags:['ransomware'] }, 726 { pt:'Acesso indevido de funcionários ou terceiros', es:'Acceso indebido de empleados o terceros', 727 icon:'ðµï¸', tags:['insider'] }, 728 { pt:'Ataques externos â APT, phishing, DDoS', es:'Ataques externos â APT, phishing, DDoS', 729 icon:'ð', tags:['external'] }, 730 { pt:'Vazamento de dados sensÃveis', es:'Filtración de datos sensibles', 731 icon:'ð§', tags:['dlp'] }, 732 { pt:'Dispositivos não gerenciados na rede', es:'Dispositivos no gestionados en la red', 733 icon:'ð±', tags:['unmanaged'] }, 734 ] 735 }, 736 { 737 id: 'regulation', 738 pt: { q: 'O cliente possui requisitos regulatórios?', sub: 'Impacta diretamente as soluções recomendadas.' }, 739 es: { q: '¿El cliente tiene requisitos regulatorios?', sub: 'Impacta directamente en las soluciones recomendadas.' }, 740 options: [ 741 { pt:'Sim â LGPD, ISO 27001 ou setor regulado (saúde, financeiro)', es:'Sà â LGPD, ISO 27001 o sector regulado (salud, financiero)', 742 icon:'âï¸', tags:['regulated'] }, 743 { pt:'Sim â OT/ICS (IEC 62443, NIST SP 800-82)', es:'Sà â OT/ICS (IEC 62443, NIST SP 800-82)', 744 icon:'ð', tags:['ot','regulated'] }, 745 { pt:'Não há requisitos especÃficos', es:'No hay requisitos especÃficos', 746 icon:'â ', tags:[] }, 747 ] 748 }, 749 { 750 id: 'maturity', 751 pt: { q: 'Qual é a maturidade de segurança do cliente?', sub: 'Avalie o estado atual do programa de segurança.' }, 752 es: { q: '¿Cuál es la madurez de seguridad del cliente?', sub: 'Evalúe el estado actual del programa de seguridad.' }, 753 options: [ 754 { pt:'Inicial â sem ferramentas formais, processos manuais', es:'Inicial â sin herramientas formales, procesos manuales', 755 icon:'ð±', tags:['low_mat'] }, 756 { pt:'Em desenvolvimento â algumas ferramentas, equipe pequena', es:'En desarrollo â algunas herramientas, equipo pequeño', 757 icon:'ð', tags:['mid_mat'] }, 758 { pt:'Avançado â SOC, SIEM, processos definidos', es:'Avanzado â SOC, SIEM, procesos definidos', 759 icon:'ð', tags:['high_mat'] }, 760 ] 761 }, 762 { 763 id: 'priority', 764 pt: { q: 'O que é mais importante para o cliente na escolha da solução?', sub: '' }, 765 es: { q: '¿Qué es más importante para el cliente al elegir la solución?', sub: '' }, 766 options: [ 767 { pt:'Facilidade de implantação e uso', es:'Facilidad de implementación y uso', 768 icon:'ð', tags:['easy'] }, 769 { pt:'Menor custo total (TCO)', es:'Menor coste total (TCO)', 770 icon:'ð°', tags:['cost'] }, 771 { pt:'Melhor proteção técnica â não importa a complexidade', es:'Mejor protección técnica â no importa la complejidad', 772 icon:'ð¬', tags:['tech'] }, 773 { pt:'Integração com ferramentas existentes', es:'Integración con herramientas existentes', 774 icon:'ð', tags:['integration'] }, 775 ] 776 }, 777]; 778 779// Mapeamento de combinações de tags â vendors recomendados com solução 780// Cada entrada: { tags (array de tags que devem estar presentes), vendor, solution, weight } 781const QUIZ_MAPPING = [ 782 // Identidade 783 { tags:['identity'], vendor:'Delinea', solution:'PAM â Privileged Access Management', weight:10 }, 784 { tags:['identity'], vendor:'SailPoint', solution:'IGA â Identity Governance', weight:9 }, 785 { tags:['identity'], vendor:'RSA', solution:'MFA â Multi-Factor Authentication', weight:8 }, 786 { tags:['identity'], vendor:'Silverfort', solution:'Unified Identity Protection', weight:9 }, 787 { tags:['identity','insider'], vendor:'Varonis', solution:'UEBA â User Behavior Analytics', weight:9 }, 788 { tags:['identity','insider'], vendor:'Delinea', solution:'PAM â Controle de Acessos Privilegiados', weight:10 }, 789 { tags:['identity','corp'], vendor:'SailPoint', solution:'IGA â Governança de Identidades', weight:10 }, 790 791 // Dados 792 { tags:['data'], vendor:'Varonis', solution:'DSPM â Data Security Posture', weight:10 }, 793 { tags:['data'], vendor:'Netskope', solution:'CASB + DLP â Proteção de Dados em Nuvem', weight:9 }, 794 { tags:['data'], vendor:'Thales', solution:'Criptografia e Gestão de Chaves', weight:8 }, 795 { tags:['data','ransomware'], vendor:'Halcyon', solution:'Anti-Ransomware Platform', weight:11 }, 796 { tags:['data','ransomware'], vendor:'Veeam', solution:'Backup & Recovery', weight:10 }, 797 { tags:['data','ransomware'], vendor:'ExaGrid', solution:'Backup Storage com Deduplicação', weight:9 }, 798 { tags:['data','dlp'], vendor:'Netskope', solution:'DLP â Data Loss Prevention', weight:10 }, 799 { tags:['data','dlp'], vendor:'Skyhigh Security', solution:'CASB + DLP â Proteção em Nuvem', weight:9 }, 800 { tags:['data','regulated'], vendor:'Thales', solution:'Criptografia e HSM â Compliance', weight:10 }, 801 { tags:['data','regulated'], vendor:'Imperva', solution:'Data Security Fabric', weight:9 }, 802 803 // Rede 804 { tags:['network'], vendor:'Gigamon', solution:'Deep Observability â Visibilidade de Rede', weight:11 }, 805 { tags:['network'], vendor:'Arista', solution:'NDR â Network Detection and Response', weight:9 }, 806 { tags:['network'], vendor:'Vectra', solution:'NDR â AI-Powered Threat Detection', weight:10 }, 807 { tags:['network'], vendor:'Hillstone Networks',solution:'NDR + NGFW', weight:8 }, 808 { tags:['network','external'], vendor:'NSFocus', solution:'DDoS Mitigation', weight:10 }, 809 { tags:['network','external'], vendor:'Imperva', solution:'WAF + DDoS Protection', weight:10 }, 810 { tags:['network','external'], vendor:'Akamai', solution:'WAAP â Web App & API Protection', weight:9 }, 811 { tags:['network','unmanaged'],vendor:'Forescout', solution:'NAC â Device Visibility & Control', weight:11 }, 812 { tags:['network','unmanaged'],vendor:'Arista', solution:'NAC â Network Access Control', weight:9 }, 813 { tags:['network','ot'], vendor:'Claroty', solution:'CPS â Cyber-Physical Systems Protection', weight:12 }, 814 { tags:['network','ot'], vendor:'Nozomi Networks', solution:'OT/IoT Security', weight:11 }, 815 816 // Endpoint 817 { tags:['endpoint'], vendor:'SentinelOne', solution:'EDR/EPP â Endpoint Protection', weight:11 }, 818 { tags:['endpoint','ransomware'],vendor:'SentinelOne', solution:'EDR + Anti-Ransomware', weight:12 }, 819 { tags:['endpoint','ransomware'],vendor:'Halcyon', solution:'Anti-Ransomware Platform', weight:12 }, 820 { tags:['endpoint','unmanaged'],vendor:'Hexnode', solution:'UEM â Unified Endpoint Management', weight:10 }, 821 822 // Compliance 823 { tags:['compliance'], vendor:'SailPoint', solution:'IGA â Governança e Auditoria de Identidades', weight:10 }, 824 { tags:['compliance'], vendor:'Varonis', solution:'DSPM â Auditoria de Acesso a Dados', weight:9 }, 825 { tags:['compliance'], vendor:'AlgoSec', solution:'NSPM â Gestão de PolÃticas de Firewall', weight:9 }, 826 { tags:['compliance','regulated'],vendor:'Thales', solution:'HSM + Criptografia â Conformidade Regulatória', weight:11 }, 827 { tags:['compliance','regulated'],vendor:'RSA', solution:'MFA + IGA â Conformidade', weight:9 }, 828 { tags:['compliance','data'], vendor:'Progress Software',solution:'MOVEit â Transferência
828Segura de Arquivos', weight:8 }, 829 830 // Performance 831 { tags:['perf'], vendor:'F5', solution:'ADC â Application Delivery Controller', weight:11 }, 832 { tags:['perf'], vendor:'A10 Networks', solution:'ADC + DDoS Protection', weight:10 }, 833 { tags:['perf'], vendor:'Akamai', solution:'CDN + Performance Global', weight:9 }, 834 { tags:['perf','dc'], vendor:'Nutanix', solution:'HCI â Hyperconverged Infrastructure', weight:10 }, 835 { tags:['perf','dc'], vendor:'Zadara', solution:'Cloud Storage â Block, File, Object', weight:9 }, 836 { tags:['perf','dc'], vendor:'Lenovo', solution:'Servidores e Storage ThinkSystem', weight:8 }, 837 { tags:['perf','onprem'], vendor:'Riverbed', solution:'WAN Optimization & Observability', weight:10 }, 838 839 // Cloud / SASE / ZTNA 840 { tags:['cloud','corp'], vendor:'Netskope', solution:'SSE â Security Service Edge', weight:11 }, 841 { tags:['cloud','corp'], vendor:'Cato Networks', solution:'SASE â SD-WAN + SSE', weight:11 }, 842 { tags:['cloud','corp'], vendor:'Skyhigh Security', solution:'SSE â CASB + SWG + DLP', weight:10 }, 843 { tags:['cloud'], vendor:'AppGate', solution:'ZTNA â Zero Trust Network Access', weight:9 }, 844 { tags:['saas'], vendor:'Netskope', solution:'CASB â Cloud Access Security Broker', weight:11 }, 845 { tags:['saas'], vendor:'Skyhigh Security', solution:'CASB â Cloud Security', weight:10 }, 846 847 // OT especÃfico 848 { tags:['ot'], vendor:'Claroty', solution:'CPS â Cyber-Physical Systems Protection', weight:12 }, 849 { tags:['ot'], vendor:'Nozomi Networks', solution:'OT/IoT Security & Visibility', weight:11 }, 850 { tags:['ot'], vendor:'Forescout', solution:'Device Visibility for OT/IoT', weight:9 }, 851 { tags:['ot'], vendor:'AppGate', solution:'ZTNA for OT â Secure Remote Access', weight:9 }, 852 853 // Email / Phishing 854 { tags:['external'], vendor:'ProofPoint', solution:'Email Security + Threat Intelligence', weight:9 }, 855 { tags:['external'], vendor:'Skyhigh Security', solution:'RBI â Remote Browser Isolation', weight:8 }, 856 857 // SOC / SIEM 858 { tags:['high_mat'], vendor:'SentinelOne', solution:'SIEM + XDR â Security Operations', weight:9 }, 859 { tags:['high_mat'], vendor:'Aiuken', solution:'Managed SOC + SIEM + SOAR', weight:10 }, 860 { tags:['high_mat','network'], vendor:'Vectra', solution:'NDR + ITDR para SOC Avançado', weight:10 }, 861]; 862 863// Estado do quiz 864let quizLang = 'pt'; 865let quizStep = -1; // -1 = seleção de idioma, 0-7 = perguntas, 8 = resultado 866let quizAnswers = {}; // { questionId: [tags] } 867let quizActiveTags = new Set(); 868 869function openQuiz() { 870 quizStep = -1; 871 quizAnswers = {}; 872 quizActiveTags = new Set(); 873 document.getElementById('quiz-overlay').classList.add('open'); 874 renderQuizStep(); 875} 876 877function closeQuiz() { 878 document.getElementById('quiz-overlay').classList.remove('open'); 879} 880 881function renderQuizStep() { 882 const body = document.getElementById('quiz-body'); 883 const i18n = QUIZ_I18N[quizLang]; 884 const hTitle = document.getElementById('quiz-header-title'); 885 const hSub = document.getElementById('quiz-header-sub'); 886 hTitle.textContent = i18n.title; 887 hSub.textContent = i18n.sub; 888 889 // ââ Seleção de idioma âââââââââââââââââââââââââââââââââââââââââââââââââââââ 890 if (quizStep === -1) { 891 body.innerHTML = ` 892 <div style="text-align:center;padding:16px 0 8px"> 893 <div class="quiz-q" style="text-align:center">${QUIZ_QUESTIONS[0].pt.q.replace(QUIZ_QUESTIONS[0].pt.q, QUIZ_I18N.pt.langQ)}</div> 894 <div class="quiz-lang"> 895 <button class="quiz-lang-btn" onclick="setQuizLang('pt')">ð§ð· Português</button> 896 <button class="quiz-lang-btn" onclick="setQuizLang('es')">ðªð¸ Español</button> 897 </div> 898 </div>`; 899 return; 900 } 901 902 // ââ Resultado âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 903 if (quizStep >= QUIZ_QUESTIONS.length) { 904 renderQuizResult(); return; 905 } 906 907 // ââ Pergunta ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 908 const q = QUIZ_QUESTIONS[quizStep]; 909 const totalQ = QUIZ_QUESTIONS.length; 910 const selected = quizAnswers[q.id] || null; 911 912 // Progress dots 913 const dots = Array.from({length: totalQ}, (_, i) => {
914 let cls = 'quiz-progress-dot'; 915 if (i < quizStep) cls += ' done'; 916 else if (i === quizStep) cls += ' active'; 917 return `<div class="${cls}"></div>`; 918 }).join(''); 919 920 const opts = q.options.map((o, i) => { 921 const isSel = selected && JSON.stringify(selected) === JSON.stringify(o.tags); 922 return `<button class="quiz-opt${isSel ? ' selected' : ''}" onclick="selectQuizOpt(${i})"> 923 <span class="quiz-opt-icon">${o.icon}</span> 924 <div> 925 <div class="quiz-opt-text">${o[quizLang]}</div> 926 </div> 927 </button>`; 928 }).join(''); 929 930 body.innerHTML = ` 931 <div class="quiz-progress">${dots}</div> 932 <div class="quiz-q">${q[quizLang].q}</div> 933 ${q[quizLang].sub ? `<div class="quiz-q-sub">${q[quizLang].sub}</div>` : ''} 934 <div class="quiz-options">${opts}</div> 935 <div class="quiz-nav"> 936 <button class="quiz-nav-btn" onclick="quizBack()" ${quizStep === 0 ? 'disabled' : ''}>${i18n.back}</button> 937 <button class="quiz-nav-btn primary" id="quiz-next-btn" 938 onclick="quizNext()" ${selected === null ? 'disabled' : ''}> 939 ${quizStep === totalQ - 1 ? i18n.finish : i18n.next} 940 </button> 941 </div>`; 942} 943 944function setQuizLang(lang) { 945 quizLang = lang; 946 quizStep = 0; 947 renderQuizStep(); 948} 949 950function selectQuizOpt(idx) { 951 const q = QUIZ_QUESTIONS[quizStep]; 952 quizAnswers[q.id] = q.options[idx].tags; 953 renderQuizStep(); 954} 955 956function quizNext() { 957 const q = QUIZ_QUESTIONS[quizStep]; 958 if (!quizAnswers[q.id]) return; 959 quizStep++; 960 renderQuizStep(); 961} 962 963function quizBack() { 964 if (quizStep > 0) { quizStep--; renderQuizStep(); } 965} 966 967function renderQuizResult() { 968 const i18n = QUIZ_I18N[quizLang]; 969 970 // Acumular todas as tags das respostas 971 const allTags = new Set(); 972 Object.values(quizAnswers).forEach(tags => tags.forEach(t => allTags.add(t))); 973 974 // Pontuar vendors 975 const scores = {}; 976 const solutionMap = {}; 977 978 QUIZ_MAPPING.forEach(m => { 979 const match = m.tags.every(t => allTags.has(t)); 980 if (!match) return; 981 scores[m.vendor] = (scores[m.vendor] || 0) + m.weight; 982 if (!solutionMap[m.vendor]) solutionMap[m.vendor] = []; 983 if (!solutionMap[m.vendor].includes(m.solution)) 984 solutionMap[m.vendor].push(m.solution); 985 }); 986 987 // Ordenar por score e pegar top 6 988 const ranked = Object.entries(scores) 989 .sort((a, b) => b[1] - a[1]) 990 .slice(0, 6); 991 992 if (!ranked.length) { 993 document.getElementById('quiz-body').innerHTML = ` 994 <div style="text-align:center;padding:24px;color:var(--muted)">${i18n.noResult}</div> 995 <button class="quiz-restart" onclick="openQuiz()">${i18n.restart}</button>`; 996 return; 997 } 998 999 const cards = ranked.map(([vendor, score], idx) => { 1000 const vData = VENDORS[vendor] || {}; 1001 const solutions = (solutionMap[vendor] || []).slice(0, 2).join(' · '); 1002 const rankCls = idx === 0 ? 'quiz-rec-rank gold' : 'quiz-rec-rank'; 1003 return ` 1004 <div class="quiz-rec-card"> 1005 <div class="${rankCls}">${idx + 1}</div> 1006 <div class="quiz-rec-body"> 1007 <div class="quiz-rec-vendor">${vendor}</div> 1008 <div class="quiz-rec-solution">${solutions}</div> 1009 <div class="quiz-rec-desc">${vData.desc || ''}</div> 1010 </div> 1011 </div>`; 1012 }).join(''); 1013 1014 document.getElementById('quiz-body').innerHTML = ` 1015 <div class="quiz-result-title">${i18n.resultTitle}</div> 1016 <div class="quiz-result-sub">${i18n.resultSub}</div> 1017 ${cards} 1018 <button class="quiz-restart" onclick="openQuiz()">${i18n.restart}</button>`; 1019} 1020 1021// Fechar com Escape 1022document.addEventListener('keydown', e => { 1023 if (e.key === 'Escape') closeQuiz(); 1024}); 1025
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.