TESTE 2026

Publicado: 03/03/2026 Última atualização: 03/03/2026 às 11:26

<!doctype html>
<html lang="pt-br">
<head>
 <meta charset="utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <title>Rede BAH.IA — Materiais e Portal Educacional</title>
 <meta name="description" content="Portal educacional da Rede BAH.IA: módulos, aulas e recursos em PPTX/DOCX, com orientações de uso e termo de licença." />
 
 <style>
   :root{
 /* Base (claro, como o ba.gov.br) */
 --bg: #ffffff;
 --text: #0f172a;              /* texto principal (escuro) */
 --muted: #475569;             /* texto secundário */
 --line: rgba(15, 23, 42, .12);

 /* Cards e superfícies */
 --card: #ffffff;
 --card2: #f8fafc;             /* leve cinza */
 --shadow: 0 10px 30px rgba(2, 6, 23, .10);

 /* Destaques (azul do site) */
 --accent: #0b5fa5;            /* azul principal (ajuste fino se quiser) */
 --accent2: #0b5fa5;           /* pode manter igual ao azul para padronizar */
 --ok: #16a34a;
 --warn: #d97706;

 --radius: 18px;
 --radius2: 26px;
 --max: 1120px;
 --pad: 18px;
}

.text-justify{
 text-align: justify;
 text-justify: inter-word;   /* melhora o espaçamento */
}

   *{ box-sizing:border-box; }
   html,body{ margin:0; padding:0;
 background: var(--bg);
 color: var(--text);
 font-family: system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif; }
   a{ color:inherit; }
   .container{ max-width: var(--max); margin:0 auto; padding: 0 var(--pad); }
   .sr-only{
     position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;
   }

   /* Skip link */
   .skip{ position:absolute; left:-999px; top:12px; background:#fff; color:#000; padding:10px 12px; border-radius:12px; z-index:9999; }
   .skip:focus{ left:12px; outline: 3px solid #000; }

   /* Header */
   header{
     position: sticky;
 top:0;
 z-index:100;
 background: #ffffff;
 border-bottom: 1px solid var(--line);
   }
   .topbar{
     display:flex; align-items:center; justify-content:space-between; gap:14px;
     padding: 14px 0;
   }
   .brand{
     display:flex; align-items:center; gap:12px; min-width: 220px;
   }
   .brand img{ height:42px; width:auto; display:block; }
   .brand .title{
     display:flex; flex-direction:column; line-height:1.05;
   }
   .brand .title strong{ font-size:14px; letter-spacing:.3px; }
   .brand .title span{ font-size:12px; color:var(--muted); }

   nav ul{ list-style:none; display:flex; gap:14px; padding:0; margin:0; flex-wrap:wrap; justify-content:flex-end; }
   nav a{
     text-decoration:none;
     color: var(--muted);
     font-size: 13px;
     padding:10px 10px;
     border-radius: 999px;
     border: 1px solid transparent;
     transition: .2s ease;
   }
   nav a:hover, nav a:focus{
     color: var(--text);
     border-color: var(--line);
     outline:none;
     background: rgba(255,255,255,.05);
   }

   /* Hero */
   .hero{
     padding: 28px 0 10px;
   }
   .heroCard{
     border: 1px solid var(--line);
     background: linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,.03));
     border-radius: var(--radius2);
     box-shadow: var(--shadow);
     overflow:hidden;
     position:relative;
   }
   .heroMedia{
     min-height: 260px;
     background:
       radial-gradient(900px 300px at 40% 10%, rgba(59,130,246,.28), transparent 55%),
       radial-gradient(900px 300px at 70% 40%, rgba(239,68,68,.22), transparent 55%),
       url("assets/Banner-BAH.IA.svg");
     background-size: cover;
     background-position: center;
     border-bottom: 1px solid var(--line);
   }
   .heroBody{
     display:grid;
     grid-template-columns: 1.2fr .8fr;
     gap: 18px;
     padding: 18px;
   }
   @media (max-width: 900px){
     .heroBody{ grid-template-columns: 1fr; }
     .brand .title{ display:none; }
   }

   .heroBody h1{
     margin:0;
     font-size: clamp(22px, 3.2vw, 34px);
     letter-spacing: -.3px;
   }
   .heroBody p{ margin:10px 0 0; color: var(--muted); line-height:1.5; }
   .ctaRow{
     display:flex; flex-wrap:wrap; gap:10px; margin-top: 14px;
   }

   .heroBodyLine{
     gap: 18px;
     padding: 18px;
   }  

   .heroBodyLine h1{
     margin:0;
     font-size: clamp(22px, 3.2vw, 34px);
     letter-spacing: -.3px;
   }
   .heroBodyLine p{ margin:10px 0 0; color: var(--muted); line-height:1.5; }
   .ctaRow{
     display:flex; flex-wrap:wrap; gap:10px; margin-top: 14px;
   }


   .btn{
     display:inline-flex; align-items:center; justify-content:center; gap:10px;
     border-radius: 999px;
     padding: 10px 14px;
     text-decoration:none;
     border: 1px solid var(--line);
     background: rgba(255,255,255,.06);
     color: var(--text);
     font-weight: 600;
     font-size: 13px;
     cursor:pointer;
     transition: .2s ease;
   }
   .btn:hover{ background: rgba(255,255,255,.10); transform: translateY(-1px); }
   .btn.primary{ border-color: rgba(11, 95, 165, .55);
 background: rgba(11, 95, 165, .12);
 color: var(--text); }
   .btn.primary:hover{ background: rgba(11, 95, 165, .18); }
   .btn.danger{ border-color: rgba(239,68,68,.55); background: rgba(239,68,68,.16); }
   .btn.danger:hover{ background: rgba(239,68,68,.22); }
   .pill{
     display:inline-flex; align-items:center; gap:8px;
     padding: 7px 10px;
     border-radius: 999px;
     border: 1px solid var(--line);
     background: rgba(255,255,255,.05);
     color: var(--muted);
     font-size: 12px;
   }
   .pill strong{ color: var(--text); font-weight:700; }

   /* Sections */
   section{ padding: 28px 0; }
   .sectionHead{
     display:flex; align-items:flex-end; justify-content:space-between; gap:12px;
     margin-bottom: 14px;
   }
   .sectionHead h2{ margin:0; font-size: 20px; letter-spacing:-.2px; }
   .sectionHead p{ margin:0; color: var(--muted); font-size: 13px; line-height:1.4; max-width: 780px; }

   .grid2{ display:grid; grid-template-columns: 1fr 1fr; gap: 14px; }
   @media (max-width: 900px){ .grid2{ grid-template-columns: 1fr; } }

   .card{
     border: 1px solid var(--line);
     background: rgba(255,255,255,.04);
     border-radius: var(--radius);
     padding: 14px;
   }
   .card h3{ margin:0 0 6px; font-size: 15px; }
   .card p{ margin:0; color: var(--muted); font-size: 13px; line-height:1.5; }

   /* Search + modules */
   .toolbar{
     display:flex; flex-wrap:wrap; gap:10px; align-items:center; justify-content:space-between;
     margin: 10px 0 14px;
   }
   .search{
     display:flex; align-items:center; gap:10px; flex: 1;
     border: 1px solid var(--line);
     border-radius: 999px;
     padding: 10px 12px;
     background: rgba(255,255,255,.04);
     min-width: 260px;
   }
   .search input{
     width:100%;
     border:0;
     outline:none;
     background:transparent;
     color: var(--text);
     font-size: 13px;
   }
   .search input::placeholder{ color: rgba(255,255,255,.55); }

   .smallNote{ color: var(--muted); font-size: 12px; }

   .modules{
     display:grid;
     grid-template-columns: repeat(12, 1fr);
     gap: 12px;
   }
   .moduleCard{
     grid-column: span 12;
     border: 1px solid var(--line);
     background: linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,.03));
     border-radius: var(--radius);
     overflow:hidden;
   }
   @media (max-width: 900px){ .moduleCard{ grid-column: span 12; } }

   .moduleHeader{
     padding: 14px;
     display:flex; align-items:flex-start; justify-content:space-between; gap:12px;
     border-bottom: 1px solid var(--line);
   }
   .moduleHeader h3{ margin:0; font-size: 15px; }
   .moduleHeader .meta{ color: var(--muted); font-size: 12px; margin-top: 2px; }
   .tagRow{ display:flex; flex-wrap:wrap; gap:8px; align-items:center; justify-content:flex-end; }
   .tag{
     font-size: 11px;
     padding: 6px 8px;
     border-radius: 999px;
     border: 1px solid var(--line);
     background: rgba(255,255,255,.05);
     color: var(--muted);
     white-space:nowrap;
   }

   details{ padding: 0; }
   details summary{
     cursor:pointer;
     list-style:none;
     padding: 12px 14px;
     display:flex; align-items:center; justify-content:space-between;
     gap: 10px;
     user-select:none;
   }
   details summary::-webkit-details-marker{ display:none; }
   .summaryLeft{
     display:flex; flex-direction:column;
   }
   .summaryLeft strong{ font-size: 13px; }
   .summaryLeft span{ color: var(--muted); font-size: 12px; margin-top:2px; }

   .lessonList{ padding: 0 14px 14px; display:grid; gap: 10px; }
   .lesson{
     border: 1px solid var(--line);
     border-radius: 14px;
     background: rgba(0,0,0,.18);
     padding: 10px 10px;
     display:flex; align-items:flex-start; justify-content:space-between; gap:10px;
   }
   .lesson .info{ display:flex; flex-direction:column; gap:2px; }
   .lesson .info strong{ font-size: 13px; }
   .lesson .info span{ font-size: 12px; color: var(--muted); }
   .lesson .actions{ display:flex; flex-wrap:wrap; gap:8px; justify-content:flex-end; }
   .btnSm{
     padding: 8px 10px;
     border-radius: 999px;
     border: 1px solid var(--line);
     background: rgba(255,255,255,.06);
     color: var(--text);
     font-size: 12px;
     font-weight: 700;
     text-decoration:none;
     cursor:pointer;
     transition:.2s ease;
   }
   .btnSm:hover{ background: rgba(255,255,255,.10); transform: translateY(-1px); }
   .btnSm.ppt{ border-color: rgba(59,130,246,.55); }
   .btnSm.doc{ border-color: rgba(239,68,68,.55); }
   .btnSm.pdf{ border-color: rgba(245,158,11,.55); }
   .btnSm.zip{ border-color: rgba(34,197,94,.55); }

   /* Downloads */
   .downloadGrid{ display:grid; grid-template-columns: repeat(12,1fr); gap:12px; }
   .downloadGrid .card{ grid-column: span 6; }
   @media(max-width:900px){ .downloadGrid .card{ grid-column: span 12; } }
   .list{ margin:10px 0 0; padding-left: 18px; color: var(--muted); font-size: 13px; line-height:1.5; }
   .list li{ margin: 6px 0; }

   /* Modal */
   .modalBackdrop{
     position: fixed; inset:0;
     background: rgba(0,0,0,.55);
     display:none;
     align-items:center; justify-content:center;
     padding: 18px;
     z-index: 999;
   }
   .modal{
     width: min(720px, 100%);
     border: 1px solid var(--line);
     background: rgba(11,16,32,.92);
     border-radius: 22px;
     box-shadow: var(--shadow);
     overflow:hidden;
   }
   .modalHead{
     padding: 14px 16px;
     border-bottom: 1px solid var(--line);
     display:flex; align-items:center; justify-content:space-between; gap:10px;
   }
   .modalHead strong{ font-size: 14px; }
   .x{
     border: 1px solid var(--line);
     background: rgba(255,255,255,.06);
     color: var(--text);
     border-radius: 12px;
     padding: 8px 10px;
     cursor:pointer;
   }
   .modalBody{ padding: 14px 16px; }
   .modalBody p{ margin:0 0 10px; color: var(--muted); font-size: 13px; line-height:1.5; }
   .termBox{
     border: 1px solid var(--line);
     background: rgba(255,255,255,.04);
     border-radius: 14px;
     padding: 12px;
     max-height: 220px;
     overflow:auto;
     color: rgba(255,255,255,.78);
     font-size: 13px;
     line-height:1.5;
   }
   .modalFoot{
     padding: 12px 16px;
     border-top: 1px solid var(--line);
     display:flex; flex-wrap:wrap; gap:10px; align-items:center; justify-content:space-between;
   }
   .checkRow{ display:flex; align-items:flex-start; gap:10px; color: var(--muted); font-size: 13px; }
   .checkRow input{ margin-top: 3px; }
   .modalFoot .btn{ padding: 10px 14px; }
   .hint{ font-size: 12px; color: var(--muted); }

   /* Footer */
   footer{
     padding: 26px 0 40px;
     border-top: 1px solid var(--line);
     background: rgba(0,0,0,.12);
   }
   .foot{
     display:flex; flex-wrap:wrap; gap:14px;
     align-items:flex-start; justify-content:space-between;
   }
   .foot p{ margin:0; color: var(--muted); font-size: 12px; line-height:1.5; max-width: 760px; }
   .foot .miniLinks{ display:flex; gap:10px; flex-wrap:wrap; justify-content:flex-end; }
   .foot .miniLinks a{ color: var(--muted); text-decoration:none; border-bottom:1px dashed rgba(255,255,255,.25); }
   .foot .miniLinks a:hover{ color: var(--text); }

   /* Focus */
   :focus-visible{ outline: 2px solid rgba(59,130,246,.9); outline-offset: 2px; border-radius: 10px; }
 </style>
</head>

<body>
 <a class="skip" href="#main">Pular para o conteúdo principal</a>

 <header>
   <div class="container">
     <div class="topbar">
       <div class="brand">
         <img src="/secti/assets/logo_fundo_transparente.png" alt="Logo da Rede BAH.IA" />
         <div class="title">
           <strong>Rede BAH.IA</strong>
           <span>Portal educacional e materiais</span>
         </div>
       </div>

       <nav aria-label="Navegação principal">
         <ul>
           <li><a href="#sobre">Sobre</a></li>
           <li><a href="#como-usar">Como usar</a></li>
           <li><a href="#modulos">Módulos e aulas</a></li>
           <li><a href="#downloads">Downloads</a></li>
           <li><a href="#contato">Contato</a></li>
         </ul>
       </nav>
     </div>
   </div>
 </header>

 <main id="main">
   <section class="hero">
     <div class="container">
       <div class="heroCard">
         <div class="heroMedia" role="img" aria-label="Banner da Rede BAH.IA"></div>
         <div class="heroBody">
           <div class="text-justify">
             <p>
               Este portal reúne os materiais da Rede BAH.IA, uma iniciativa colaborativa de instituições baianas voltada à produção de <b>conteúdos educacionais gratuitos sobre Inteligência Artificial</b>.</p>
<p>
Os materiais são organizados em módulos e podem ser usados de forma <b>flexível e adaptável</b>, apoiando o trabalho docente em diferentes níveis de ensino.</p>
<p>
A proposta do BAH.IA valoriza a <b>contextualização regional, a inclusão e a diversidade</b>, aproximando a Inteligência Artificial da realidade educacional da Bahia.</p>

             <div class="ctaRow">
               <a class="btn primary" href="#modulos">Acessar módulos</a>
               <button class="btn danger" type="button" data-download="https://drive.google.com/file/d/11zT1qfBrmAQ_CtgI_wwBtOrEuR8T6taU/view?…">
                 Baixar pacote completo (ZIP)
               </button>
               <a class="btn primary" href="#como-usar">Como usar o material</a>
             </div>

           </div>

           <div class="card" style="height:fit-content;">
             <h3 style="margin:0 0 8px;">Acesso rápido</h3>
             <p style="margin:0 0 10px;">
               Use a busca abaixo para localizar rapidamente uma aula por tema, módulo ou palavra-chave.
             </p>
             <div class="search" role="search" aria-label="Buscar conteúdo">
               <span aria-hidden="true">🔎</span>
               <input id="q" type="search" placeholder="Ex.: 'Ética', 'PLN', 'Aprendizado supervisionado'..." />
             </div>
             <p class="smallNote" style="margin-top:10px;">
               Dica: você pode baixar os materiais por aula (PPTX/DOCX) ou por módulo (ZIP).
             </p>
           </div>
         </div>
       </div>
     </div>
   </section>

   <!-- SOBRE -->
   <section id="sobre">
     <div class="container">
       <div class="heroCard">
         <div class="heroBodyLine">
           <h2>Sobre o portal</h2>
           <p class="text-justify">
             Este portal consolida a Rede BAH.IA, que reúne professores, pesquisadores e estudantes de sete instituições baianas para produzir e organizar materiais didáticos gratuitos sobre Inteligência Artificial.
           </p>
<p class="text-justify">
Os materiais produzidos foram pensados para facilitar o acesso, a navegação e o uso em sala de aula. Os conteúdos são organizados em módulos, o que permite que cada professor use o material de forma flexível, sem precisar seguir uma ordem fixa.
</p>
<p class="text-justify">
A identidade visual dos materiais segue princípios que orientam toda a proposta da Rede BAH.IA: regionalização, inclusão, diversidade, personalização do ensino e proximidade com professores e estudantes, além de manter coerência com a identidade do Estado da Bahia. Esses princípios guiam o uso de cores, personagens, ícones, ilustrações e exemplos presentes nos slides e recursos educacionais.
</p>
<p class="text-justify">
Os elementos visuais foram inspirados na cultura baiana para aproximar os conteúdos da realidade dos estudantes e fortalecer o sentimento de pertencimento, como uma forma de contextualizar o ensino, sem favorecer nenhum grupo específico.
</p>

<br />

<div >
         <div class="card">
           <h3>O que você encontra aqui</h3>
           <p>
             Módulos e aulas com <strong>slides editáveis (PPTX)</strong>, <strong>planos de aula (DOCX)</strong>
             e PDFs para consulta rápida.
           </p>
           <ul class="list">
             <li>Materiais por aula e por módulo</li>
             <li>Orientações de uso e dependências entre módulos</li>
             <li>Termo de uso para manter integridade e atribuição</li>
           </ul>
         </div>
<br />
         <div class="card">
           <h3>Para quem é</h3>
           <p>
             Educadores, gestores e pessoas interessadas em aprender e aplicar conceitos de IA na educação.
             O conteúdo foi desenhado para adaptação conforme o contexto e o nível da turma.
           </p>
           <ul class="list">
             <li>Ensino médio e técnico (uso sugerido)</li>
             <li>Formação continuada de docentes</li>
             <li>Uso institucional/educacional</li>
           </ul>
         </div>
       </div>
     </div>


         </div>
       </div>
       
   </section>

   <!-- COMO USAR -->
   <section id="como-usar">
     <div class="container">
       <div class="heroCard">
         <div class="heroBodyLine">
           <h2>Como usar o material</h2>
           <p class="text-justify">
             O material apresenta uma organização conceitual progressiva, do Módulo 1 (M1) ao Módulo 7 (M7), mas admite conexões entre módulos, permitindo ajustes ao nível e ao contexto da turma, bem como a definição de diferentes trilhas de aprendizagem, conforme sugerido a seguir.
           </p>
         
       
<br />
       <div >
       <div class="card">
                   <h3>Trilhas sugeridas</h3>
                   <ul class="list">
                     <li><strong>Trilha essencial (rápida):</strong> M1 → M2 → M3 → M7</li>
                     <li><strong>Trilha completa:</strong> M1 → M2 → M3 → M4 → M5 → M6 → M7</li>
                     <li><strong>Trilha ética e cidadania digital:</strong> M1 → M3 → M4 (opcional: M7)</li>
                   </ul>
                   <p class="text-justify">
                     Você pode iniciar pelos módulos que preferir, desde que respeite os pré-requisitos (por exemplo, os Módulos 5 (M5) e 7 (M7) dependem dos Módulos 1 (M1) e 3 (M3)). A estrutura geral, as dependências entre módulos e também o alinhamento com a Base Nacional Comum Curricular (BNCC) estão detalhados no link “Como usar o material”.
                   </p>
       <p class="text-justify" style="margin-top:10px; color:var(--muted); font-size:13px; line-height:1.5;">
       Nesse link, cada módulo é associado às competências da BNCC. Por exemplo, o Módulo 1 está ligado às competências que possuem foco em pensamento científico e cultura digital, enquanto o Módulo 4 se conecta às competências voltadas à cidadania digital e responsabilidade.
       </p>
                 </div>
       <br />
                 <div class="card">
                   <h3>Boas práticas em sala</h3>
                   <ul class="list">
                     <li>Use os <strong>PPTX</strong> para adaptar linguagem, exemplos e duração.</li>
                     <li>Consulte o plano de aula em <strong>DOCX</strong> para ver os objetivos e atividades e adaptá-los conforme sua necessidade.</li>
                     <li>Se for reutilizar/redistribuir, mantenha <strong>créditos</strong> e cite a origem (Rede BAH.IA).</li>
                   </ul>
                   <p class="text-justify">
                     O portal não exige cadastro nem realiza coleta obrigatória de dados pessoais. No entanto, para acessar e utilizar os materiais, é necessário aceitar um termo de uso que assegura a integridade, a correta distribuição e o uso responsável do conteúdo. O descumprimento dessas regras pode resultar em penalidades previstas no próprio termo.
                   </p>
                 </div>
</div>
       </div>
       </div>
     </div>
   </section>

   <!-- MÓDULOS -->
   <section id="modulos">
     <div class="container">
       <div class="heroCard">
           <div class="heroBodyLine text-justify">
         <div>
           <h2>Módulos e aulas</h2>
           <p class="text-justify">
             Clique em um módulo para ver as aulas. Cada aula pode ter: <strong>PPTX</strong> (slides editáveis), <strong>DOCX</strong> (plano de aula) e <strong>PDF</strong> (visualização).
           </p>
         </div>
       

       <div class="toolbar">
         <div class="smallNote" id="resultNote">Mostrando todos os módulos.</div>
         <div class="smallNote">Precisa de algo específico? Use a busca no topo.</div>
       </div>

       <div class="modules" id="modulesRoot" aria-live="polite"></div>
       </div>
       </div>
     </div>
   </section>

   <!-- DOWNLOADS -->
   <section id="downloads">
     <div class="container">
       <div class="heroCard">
           <div class="heroBodyLine text-justify">
         <div>
           <h2>Recursos para download</h2>
           <p>
             Para preservar a integridade do conteúdo e garantir a atribuição, os downloads exibem um termo de responsabilidade de uso antes do arquivo ser disponibilizado.
           </p>
         </div>
       
<br />
       <div>
         <div class="card">
           <h3>Pacote completo</h3>
           <p>Baixe todos os módulos e recursos em um único arquivo.</p>
           <div class="ctaRow">
             <button class="btn danger" type="button" data-download="https://drive.google.com/file/d/11zT1qfBrmAQ_CtgI_wwBtOrEuR8T6taU/view?…">
               Baixar pacote completo (ZIP)
             </button>
           </div>
           <p class="smallNote" style="margin-top:10px;">
             Sugestão: mantenha o “versão/data” do pacote no nome do arquivo.
           </p>
         </div>
<br />
         <div class="card">
           <h3>Licença e uso correto</h3>
           <p>O material pode ser usado e adaptado para fins educacionais, com atribuição e preservação de créditos.</p>
           <ul class="list">
             <li>Mantenha a referência: “Rede BAH.IA – Governo do Estado da Bahia / SECTI”.</li>
             <li>Não remova marcas/logos e não atribua autoria indevida.</li>
             <li>Ao adaptar, sinalize que se trata de uma versão derivada.</li>
           </ul>
         </div>
       </div>
       </div>
       </div>
       
     </div>
   </section>

   <!-- Créditos -->
   <section id="creditos">
     <div class="container">
       <div class="heroCard">
           <div class="heroBodyLine text-justify">
         <div>
           <h2>Créditos de elaboração</h2>
         </div>
       

    <div class="card">
           <h3>Instituições </h3>
           <p>Este material foi desenvolvido por professores, pesquisadores e estudantes da área de Inteligência Artificial das seguintes instituições:</p>
           <ul class="list">
             <li>Universidade Federal da Bahia (UFBA).</li>
             <li>Universidade do Estado da Bahia (UNEB).</li>
             <li>Universidade SENAI/CIMATEC.</li>
          <li>Universidade Estadual de Feira de Santana (UEFS).</li>
             <li>Universidade Estadual do Sudoeste da Bahia (UESB).</li>
             <li>Universidade Estadual de Santa Cruz (UESC).</li>
             <li>Instituto Federal Baiano (IF Baiano).</li>
           </ul>
         </div>
<br />
       <div class="card">
           <h3>Coordenação</h3>
           <p>Essas instituições integram a Rede BAH.IA, sob a coordenação de:</p>
           <ul class="list">
             <li>Tatiane Nogueira Rios (Coordenadora Geral).</li>
             <li>Ricardo Araújo Rios (Coordenador de Conteúdo).</li>
             <li>Oberdan Rocha Pinheiro (Coordenador de Armazenamento e Portal).</li>
          <li>Josemar Rodrigues de Souza (Coordenador de Disseminação).</li>
           </ul>
         </div>
</div>
</div>
         
       </div>
   </section>


   <!-- CONTATO -->
   <section id="contato">
     <div class="container">
       <div class="heroCard">
           <div class="heroBodyLine text-justify">
         <div>
           <h2>Contato e Informações</h2>
           <p>
             Para mais informações sobre a Rede Bah.IA e outros projetos da SECTI, entre em contato:
           </p>
           <p>
              Endereço: 5ª Avenida, Plataforma II, Ala B, 1º Andar, nº 550, CAB, Salvador, BA, CEP: 41745-004 
           </p>
         </div>
       <br />

       <div class="grid2">
         <div class="card">
           <h3>Contato</h3>
           <p>
             Contato: <a href="/secti/fale-conosco">https://www.ba.gov.br/secti/fale-conosco</a&gt;
           </p>            
         </div>

         <div class="card">
           <h3>Feedback rápido</h3>
           <div class="ctaRow">
             <a class="btn" href="https://forms.gle/jMfPmUpxEFdwF2vh6" target="_blank" rel="noopener">Formulário</a>
           </div>
         </div>
       </div>
       </div>
       
       </div>
     </div>
   </section>

 </main>

 <footer>
   <div class="container">
     <div class="foot">
       <p>
         <strong>Rede BAH.IA</strong> — Portal educacional. Materiais para uso e adaptação com atribuição e preservação de créditos.
         <br/>
         Observação: links externos devem ser identificados e o conteúdo deve ser auditável institucionalmente.
       </p>
       <div class="miniLinks" aria-label="Links complementares">
         <a href="#sobre">Sobre</a>
         <a href="#como-usar">Como usar</a>
         <a href="#modulos">Módulos</a>
         <a href="#downloads">Downloads</a>
         <a href="#contato">Contato</a>
       </div>
     </div>
   </div>
 </footer>

 <!-- Modal de termo -->
 <div class="modalBackdrop" id="modalBackdrop" role="dialog" aria-modal="true" aria-labelledby="modalTitle">
   <div class="modal">
     <div class="modalHead">
       <strong id="modalTitle">Termo de uso e licença — Rede BAH.IA</strong>
       <button class="x" id="closeModal" type="button" aria-label="Fechar">✕</button>
     </div>
     <div class="modalBody">
       <p>
         Antes de baixar, confirme que você leu e concorda com o termo abaixo.
         (Não há exigência de cadastro e não há coleta obrigatória de dados.)
       </p>
       <div class="termBox" tabindex="0" aria-label="Termo de uso">
         <p style="margin:0 0 10px;"><strong>Resumo do termo</strong></p>
         <ol style="margin:0; padding-left:18px;">
           <li>Este material é disponibilizado para <strong>fins educacionais</strong>.</li>
           <li>É permitido <strong>baixar, usar e adaptar</strong>, desde que sejam mantidos <strong>créditos e referências</strong> à origem: “Rede BAH.IA – Governo do Estado da Bahia / SECTI”.</li>
           <li>É vedada a <strong>remoção de marcas/logos</strong>, a redistribuição que induza <strong>autoria indevida</strong> e o uso que desvirtue o contexto educacional.</li>
           <li>Ao adaptar, sinalize claramente que se trata de uma <strong>versão derivada</strong>.</li>
         </ol>
         <p style="margin:10px 0 0; color:rgba(255,255,255,.7); font-size:12px;">
           Se vocês preferirem, substituam este termo por uma licença formal (ex.: Creative Commons) e adicionem o selo correspondente.
         </p>
       </div>
     </div>
     <div class="modalFoot">
       <label class="checkRow">
         <input id="agree" type="checkbox" />
         <span>Li e concordo com o termo de uso e com a preservação de créditos e integridade do conteúdo.</span>
       </label>
       <div style="display:flex; gap:10px; align-items:center; flex-wrap:wrap;">
         <span class="hint" id="modalHint">Marque a caixa para liberar o download.</span>
         <button class="btn primary" id="confirmDownload" type="button" disabled>Baixar arquivo</button>
       </div>
     </div>
   </div>
 </div>

 <script>
   /**
    * ✅ Como editar os conteúdos:
    * - Atualize "modulesData" com as aulas e links reais.
    * - Para cada aula: pptx/docx/pdf.
    * - Para cada módulo: zip.
    *
    * Observação: o portal suporta PPTX/DOCX como materiais principais;
    * PDF fica como visualização, se desejarem.
    */

   const modulesData = [
     {
       id: "m1",
       title: "Módulo 1 — Introdução à IA",
       subtitle: "Este módulo estabelece os pilares conceituais da Inteligência Artificial e da Computação, servindo como base para os demais módulos.",
       prereq: "Sem pré-requisitos",
       tags: ["Fundamentos", "Computação", "Base"],
       zip: "https://drive.google.com/file/d/1tWzPcSdD33akVkcmH40FzdbNXtN3v8hq/view?…",
       lessons: [
         { code: "Aula 01", title: "Aspectos Filosóficos da IA", pptx:"https://docs.google.com/presentation/d/1C7xpFUGliurrftEZdm2sA_qX8eQbrnW…", docx:"https://docs.google.com/document/d/1vjqgkwtshbfH3VAef92TLrPc2ONMRXQY/ed…", pdf:"https://drive.google.com/file/d/12YfljwuEUM6BgUGjkWWGyjjZkmbz8r2X/view?…" },
         { code: "Aula 02", title: "Histórico da IA",               pptx:"https://docs.google.com/presentation/d/1hqigKMLHUBausNXWp67TU5IvUOtaq4V…", docx:"https://docs.google.com/document/d/1kMT6Xkzf9PrRlFEVHDDrG0SoW6qDrhAV/ed…", pdf:"https://drive.google.com/file/d/1-jtg-xljRlZgfU7QH5dFwsh1cDic2qGs/view?…" },
         { code: "Aula 03", title: "Computação Básica",            pptx:"https://docs.google.com/presentation/d/1GZ3d8NK2iyuuV_TfMvOgbtWwrnlNwfY…", docx:"https://docs.google.com/document/d/1wO3GnCDAHoYB0K65elfg24aWdAUVpvo1/ed…", pdf:"https://drive.google.com/file/d/1nnD3HNvrdeMXE_3VFxBoTCvIFIHutOxw/view?…" },
         { code: "Aula 04", title: "Aplicações Institucionais (Bahia)", pptx:"https://docs.google.com/presentation/d/1A9_4F3MoEyR36_KSM-bxNYA1cz3vrqk…", docx:"https://docs.google.com/document/d/14i56k6W6juVc79HR4ajdyxoihMDR-yx5/ed…", pdf:"https://drive.google.com/file/d/1Cqaf6PbN_1NMkqnD3KUoSZMu83lnYsB7/view?…" },
       ]
     },
     {
       id: "m2",
       title: "Módulo 2 — Dados",
       subtitle: "Este módulo foca no manuseio, organização e qualidade dos dados, com dependências diretas do Módulo 1 e conexões com o Módulo 2.",
       prereq: "M1",
       tags: ["Dados", "Ciência de Dados"],
       zip: "https://drive.google.com/file/d/1cTRLPPjdjfa-79xHRfEmo7Q-dSIl8hfV/view?…",
       lessons: [
         { code:"Aula 05", title:"Coleta de Dados",                     pptx:"https://docs.google.com/presentation/d/1V7sUf5E2N8dIacHZMlNlyKuxJzI7ZD3…", docx:"https://docs.google.com/document/d/164jLBpb2RteZLMWv00QZ1Jb5-vHJE0pb/ed…", pdf:"https://drive.google.com/file/d/1HMXe9ClzHxrG0GGBJWwGhOk0PaLt0cTu/view?…" },
         { code:"Aula 06", title:"Tratamento de Dados não Estruturados",pptx:"https://docs.google.com/presentation/d/1hml3YJFgBDv7LZnLxPno3Ns4IQDyENu…", docx:"https://docs.google.com/document/d/1VHtAbKxM-us4DUPPeI666jMKoPYA5gK1/ed…", pdf:"https://drive.google.com/file/d/1vUjjKwEiUw2Tzl4t8otpu4kc3GfqBUzM/view?…" },
         { code:"Aula 07", title:"Trabalhando com Dados Estruturados",  pptx:"https://docs.google.com/presentation/d/1Ou7KYY_Ec-7cxX9UoH0ICL1rG7ICLOt…", docx:"https://docs.google.com/document/d/1nwMnANziY0AlyGqzM8HF-AGk9SRFuGOZ/ed…", pdf:"https://drive.google.com/file/d/1spZj0d8XyJGkEpBMYxeCZ3HnC63xfErk/view?…" },
         { code:"Aula 08", title:"Introdução à Ciência de Dados",       pptx:"https://docs.google.com/presentation/d/1bk--boCADVIcX57i1mJCFof1tO0MhK-…", docx:"https://docs.google.com/document/d/1OzXy8qfXttZacwIFWGjp38M4aGODkotF/ed…", pdf:"https://drive.google.com/file/d/1xXm4AYNXscB9DHNPjekaslj2djaSyXDZ/view?…" },
       ]
     },
     {
       id:"m3",
       title:"Módulo 3 — Aprendizado de Máquina",
       subtitle:"Este é um módulo central, essencial para os Módulos 2, 5 e 7, pois introduz e diferencia os principais tipos de aprendizado de máquina: supervisionado, não supervisionado e por reforço.",
       prereq: "M1 e conhecimentos básicos de Matemática",
       tags:["ML", "Redes Neurais"],
       zip:"https://drive.google.com/file/d/1Xqw2-0wxQj7mT3xbqMAeumg-vCbjqMst/view?…",
       lessons:[
         { code:"Aula 09", title:"Aprendizado Supervisionado",    pptx:"https://docs.google.com/presentation/d/1IbPVxI-hObdXbJCMgwDGq_ffOB2z-Du…", docx:"https://docs.google.com/document/d/1odWx6j7sFQ2DZ0hEPGdnaQ6eW3rtE9oe/ed…", pdf:"https://drive.google.com/file/d/1UEZBoVBwVPEMcge6mX1bIFYv0fqmm7kc/view?…" },
         { code:"Aula 10", title:"Aprendizado Não Supervisionado",pptx:"https://docs.google.com/presentation/d/1Y6Jhrmh9sM-BW2KO_UsM2w09wcgdc1m…", docx:"https://docs.google.com/document/d/1GrQaAdiDrFem1Onh4EGuoZK2aE7tNKc7/ed…", pdf:"https://drive.google.com/file/d/1bw1hgS5HKblR5vrepPtXB1ZWZJfASCaL/view?…" },
         { code:"Aula 11", title:"Aprendizado por Reforço",       pptx:"https://docs.google.com/presentation/d/14PC7vU76RHOhK0vJ3caMI6ODiupxxs7…", docx:"https://docs.google.com/document/d/1oe7h6AxuIa3-dLM28-I9jVWKXWPvZpes/ed…", pdf:"https://drive.google.com/file/d/1H1BXF-xYNkHqtjVToBCfErQ3IsbUE45h/view?…" },
         { code:"Aula 12", title:"Aprendizado Evolutivo",         pptx:"https://docs.google.com/presentation/d/1fPjQUZ8063sS_AkLuvrIY64eV6rFREu…", docx:"https://docs.google.com/document/d/1_iOJyzC90SbfPjyRHolaHgyLTU4brm8j/ed…", pdf:"https://drive.google.com/file/d/1k0MzShQqjGv7RrR5Wgitz4f-B1NBA8Fo/view?…" },
         { code:"Aula 13", title:"Redes Neurais",                 pptx:"https://docs.google.com/presentation/d/1VM1zisV9Ig1NCVV0lr3EoGJOqXO93-m…", docx:"https://docs.google.com/document/d/1SMjXQN1sWohK1S5EmqAXa4zoC9f-qjIX/ed…", pdf:"https://drive.google.com/file/d/1lZRL1Day2r3SV0qgERDuM_F_jBV_iJKw/view?…" },
       ]
     },
     {
       id:"m4",
       title:"Módulo 4 — Ética e Impacto Social",
       subtitle:"Este módulo aborda os impactos sociais, legais e éticos da IA, articulando conceitos técnicos com responsabilidade social.",
       prereq:"M1 e M3 (para aprofundar)",
       tags:["Ética", "Governança"],
       zip:"https://drive.google.com/file/d/1llYk7NGmKA_oZ6BNPv-vaGEeCFMJqfzQ/view?…",
       lessons:[
         { code:"Aula 14", title:"Ética em IA",                      pptx:"https://docs.google.com/presentation/d/1VGgi8IX6BZtGC7iR4x1Dr5NLX2fPGvx…", docx:"https://docs.google.com/document/d/18YPxc6EiAu19uuAPfpar6wkmDojOqSxE/ed…", pdf:"https://drive.google.com/file/d/1i08ROhz0HDQ4bDyX2Qksgq5UhRKjttBS/view?…" },
         { code:"Aula 15", title:"Governança: Regulamentação da IA", pptx:"https://docs.google.com/presentation/d/1TCqrET5p-y8LaIxnH7U5iRAbcUHFvXq…", docx:"https://docs.google.com/document/d/1SzA-uEX5FMyuJpDnRi9ti4xX5yee1sde/ed…", pdf:"https://drive.google.com/file/d/1wK0oYkZtAFzHnEwZR6rLSejqgZI5_TLP/view?…" },
         { code:"Aula 16", title:"Viés Algorítmico e Discriminação", pptx:"https://docs.google.com/presentation/d/1i97GSUVnzjIFqrVruccBwTo2PybzeZ6…", docx:"https://docs.google.com/document/d/1CEGDre6QmpwJFELMUza6oTcUbWrFq81O/ed…", pdf:"https://drive.google.com/file/d/1Wlv1iAZsMX_jvO6cBhNtjqF7D8gJ14zK/view?…" },
         { code:"Aula 17", title:"Transparência e Responsabilidade",  pptx:"https://docs.google.com/presentation/d/1jA9jRa5LCSIuf6V-AatxsP4umo78yml…", docx:"https://docs.google.com/document/d/1X-ZIp_nBssuMaTKGkLa5IKPxsCQqYrJl/ed…", pdf:"https://drive.google.com/file/d/1mkJFefG7LxhGCJDf2Mzrbq_IlfZbwNf0/view?…" },
       ]
     },
     {
       id:"m5",
       title:"Módulo 5 — Processamento de Linguagem Natural (PLN)",
       subtitle:"Este módulo trata da interpretação e geração de textos por computadores.",
       prereq:"M3",
       tags:["PLN", "Texto"],
       zip:"https://drive.google.com/file/d/1moOn2KaqKFkDLLMYr8df2LLHjQL3sLTP/view?…",
       lessons:[
         { code:"Aula 18", title:"Introdução ao PLN",                   pptx:"https://docs.google.com/presentation/d/1oIpQhBUEOAt5E4AydAHeMXYFxYrKNYS…", docx:"https://docs.google.com/document/d/1oWbpptvQHeTjmwWqsujeOKTD8opSi1QO/ed…", pdf:"https://drive.google.com/file/d/1-etqm4Qf7jPlohAdn840bedSuMFthTTC/view?…" },
         { code:"Aula 19", title:"Modelos de Representação de Dados",    pptx:"https://docs.google.com/presentation/d/1TcmHq0CWVpLRfu45n77hLnwcWF36hZd…", docx:"https://docs.google.com/document/d/19r_INEo-XkRE9a-2J9FKOasQj6fsnpdx/ed…", pdf:"https://drive.google.com/file/d/1zkdUebwFyeral6Bs7X3rHtzqWLyHFo0l/view?…" },
         { code:"Aula 20", title:"Técnicas de Representação Semântica",  pptx:"https://docs.google.com/presentation/d/1z229qybT9wytuQl3OsI4eH-eF8fOzEI…", docx:"https://docs.google.com/document/d/1s_sLCsfRHrgUkJmQCPmg6KuuWcRq9eby/ed…", pdf:"https://drive.google.com/file/d/11wMnVyKaNiPuEHHTOjKFqXdhrKrjaY9n/view?…" },
         { code:"Aula 21", title:"Aplicações Práticas de PLN",           pptx:"https://docs.google.com/presentation/d/1NFJfzUMl5J10RZjIk2fU65ZkXimonq7…", docx:"https://docs.google.com/document/d/13wUGm4Q9VpkBN0ts8ejAcZWHvBXlMsKr/ed…", pdf:"https://drive.google.com/file/d/189Ksz6NyGehNtBFqfO4qaoSbCIN8d0LL/view?…" },
       ]
     },
     {
       id:"m6",
       title:"Módulo 6 — Visão Computacional e Robótica",
       subtitle:"Este módulo explora como máquinas interpretam imagens e vídeos.",
       prereq:"conhecimentos básicos de Física e Matemática",
       tags:["Visão Computacional", "Robótica"],
       zip:"https://drive.google.com/file/d/1GILVTUHEGX0JSPsityl2UVe0qf4PeWjn/view?…",
       lessons:[
         { code:"Aula 22", title:"Fundamentos de Visão Computacional", pptx:"https://docs.google.com/presentation/d/1P_rgm98py24eKD2IX3L4ORpnKzdMSNG…", docx:"https://docs.google.com/document/d/1aRhrOYNu15sQk8xbEBxY2jxTxu2LqAK_/ed…", pdf:"https://drive.google.com/file/d/1Q3LP6HcC5ySCGik6fhaPb-gdhs-6DXva/view?…" },
         { code:"Aula 23", title:"Aplicações de Visão Computacional",  pptx:"https://docs.google.com/presentation/d/1LDfENkevRejOn9wZEmnhM6ipo96Xitj…", docx:"https://docs.google.com/document/d/1ADLy6JfBDGH1g3onQavpwE45W-omhu4m/ed…", pdf:"https://drive.google.com/file/d/1ByIcDJhwMhJwUp32b2XoaPPv4AS42I_2/view?…" },
         { code:"Aula 24", title:"Robótica",                          pptx:"https://docs.google.com/presentation/d/1OlptUnAO6_2ctPwJ8R37DC7hUvzsywb…", docx:"https://docs.google.com/document/d/1nbDw8ZdscdtwYgAg18pGCe8zi5iE9TEW/ed…", pdf:"https://drive.google.com/file/d/1OxeOz0CXpOuq-CW6yUMGZsvlfXYLCzNU/view?…" },
       ]
     },
     {
       id:"m7",
       title:"Módulo 7 — IA na Educação",
       subtitle:"Este módulo consolida o aprendizado dos módulos anteriores com aplicações práticas e educacionais da IA.",
    prereq: "M3",
    tags:["Educação", "IA Generativa", "Prompt"],
       zip:"https://drive.google.com/file/d/16_EWlwN_r5rWckJfZ_o1p-uvsmPxHGut/view?…",
       lessons:[
         { code:"Aula 25", title:"Plataformas de IA para Alunos e Professores", pptx:"https://docs.google.com/presentation/d/1Jn21R3T8kXCOynuEgk2S5fvSId-BfBT…", docx:"https://docs.google.com/document/d/1S4KLoemn0p0bW3cdffEMCcinG0hfOUz9/ed…", pdf:"https://drive.google.com/file/d/1euNstjR3sHvT-jnE5dYIfSp8AHSJghnd/view?…" },
         { code:"Aula 26", title:"Como Estimular a Criatividade com IA",       pptx:"https://docs.google.com/presentation/d/1VkM2KELgM9yMotQ-5_LazpuiycZzviz…", docx:"https://docs.google.com/document/d/17tnj66hNO9PBSnYBEb5hVPYetnAH_fQk/ed…", pdf:"https://drive.google.com/file/d/1_Ux5SrCl_WhqCM5jqLkhzqbISFgt_MeF/view?…" },
         { code:"Aula 27", title:"Introdução à Engenharia de Prompt",          pptx:"https://docs.google.com/presentation/d/1Gv2-CO-PTM1pqLaSi3invLImEIex6Fq…", docx:"https://docs.google.com/document/d/1naGccS7pOkrggxBFWXBqQZkjDl_iGXdB/ed…", pdf:"https://drive.google.com/file/d/14nfYy8XLp_pO-3Vt00vORKsOsb9Gcqe8/view?…" },
         { code:"Aula 28", title:"Como Verificar Informações Usando IA",       pptx:"https://docs.google.com/presentation/d/17gBm8G7awYNWJR1R-WMsH4hP5vYdcfg…", docx:"https://docs.google.com/document/d/1aBShuqKg4T5qNNSb-DLjQli6Pou_4o8W/ed…", pdf:"https://drive.google.com/file/d/1kCPiYSDZIjAMaa9OTd4CmKVTWTIvAKhQ/view?…" },
       ]
     },
   ];

   const modulesRoot = document.getElementById("modulesRoot");
   const q = document.getElementById("q");
   const resultNote = document.getElementById("resultNote");

   function escapeHtml(s){
     return String(s).replace(/[&<>"']/g, m => ({ "&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;" }[m]));
   }

   function includesQuery(obj, query){
     const hay = [
       obj.title, obj.subtitle, obj.prereq,
       ...(obj.tags||[]),
       ...(obj.lessons||[]).flatMap(l => [l.code, l.title])
     ].join(" ").toLowerCase();
     return hay.includes(query.toLowerCase());
   }

   function renderModules(filter=""){
     modulesRoot.innerHTML = "";
     const data = filter ? modulesData.filter(m => includesQuery(m, filter)) : modulesData.slice();

     resultNote.textContent = filter
       ? `Resultados para: "${filter}" — ${data.length} módulo(s).`
       : "Mostrando todos os módulos.";

     data.forEach(m => {
       const el = document.createElement("article");
       el.className = "moduleCard";
       el.setAttribute("aria-label", m.title);

       const tagsHtml = (m.tags||[]).map(t => `<span class="tag">${escapeHtml(t)}</span>`).join("");

       el.innerHTML = `
         <div class="moduleHeader">
           <div>
             <h3>${escapeHtml(m.title)}</h3>
             <div class="meta">${escapeHtml(m.subtitle)} • <strong>Pré-requisito:</strong> ${escapeHtml(m.prereq)}</div>
           </div>
           <div class="tagRow">
             ${tagsHtml}
             <button class="btnSm zip" type="button" data-download="${escapeHtml(m.zip)}" aria-label="Baixar módulo em ZIP">Baixar módulo (ZIP)</button>
           </div>
         </div>

         <details>
           <summary>
             <span class="summaryLeft">
               <strong>Ver aulas e materiais</strong>
               <span>${m.lessons.length} aula(s)</span>
             </span>
             <span aria-hidden="true">▾</span>
           </summary>

           <div class="lessonList">
             ${m.lessons.map(l => `
               <div class="lesson">
                 <div class="info">
                   <strong>${escapeHtml(l.code)} — ${escapeHtml(l.title)}</strong>                   
                 </div>
                 <div class="actions">
                   <button class="btnSm ppt" type="button" data-download="${escapeHtml(l.pptx)}">Aula</button>
                   <button class="btnSm doc" type="button" data-download="${escapeHtml(l.docx)}">Plano de Aula</button>
                   <button class="btnSm pdf" type="button"
       data-download="${escapeHtml(l.pdf)}"
       aria-label="Visualizar PDF"
       title="Visualizar PDF">
 <svg width="16" height="16" viewBox="0 0 24 24" fill="none"
      xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
   <path d="M12 5C7 5 3.1 8 1.5 12C3.1 16 7 19 12 19C17 19 20.9 16 22.5 12C20.9 8 17 5 12 5Z"
         stroke="currentColor" stroke-width="2"/>
   <circle cx="12" cy="12" r="3" stroke="currentColor" stroke-width="2"/>
 </svg>
</button>

                 </div>
               </div>
             `).join("")}
           </div>
           
         </details>
         
       `;

       modulesRoot.appendChild(el);
     });
   }

   // Termo / download gating
   const modalBackdrop = document.getElementById("modalBackdrop");
   const closeModalBtn = document.getElementById("closeModal");
   const confirmBtn = document.getElementById("confirmDownload");
   const agree = document.getElementById("agree");
   const modalHint = document.getElementById("modalHint");

   let pendingUrl = null;

   function openModal(url){
     pendingUrl = url;
     agree.checked = false;
     confirmBtn.disabled = true;
     modalHint.textContent = "Marque a caixa para liberar o download.";
     modalBackdrop.style.display = "flex";
     // foco no modal
     closeModalBtn.focus();
   }
   function closeModal(){
     modalBackdrop.style.display = "none";
     pendingUrl = null;
   }

   agree.addEventListener("change", () => {
     const ok = agree.checked;
     confirmBtn.disabled = !ok;
     modalHint.textContent = ok ? "Pronto. Clique em “Baixar arquivo”." : "Marque a caixa para liberar o download.";
   });

   confirmBtn.addEventListener("click", () => {
     if(!pendingUrl) return;

     // Opcional: guardar consentimento local (não é dado pessoal)
     localStorage.setItem("bahia_terms_accepted", "yes");

     // Disparar download
     const a = document.createElement("a");
     a.href = pendingUrl;
     a.download = "";
     document.body.appendChild(a);
     a.click();
     a.remove();

     closeModal();
   });

   closeModalBtn.addEventListener("click", closeModal);
   modalBackdrop.addEventListener("click", (e) => {
     if(e.target === modalBackdrop) closeModal();
   });
   document.addEventListener("keydown", (e) => {
     if(e.key === "Escape" && modalBackdrop.style.display === "flex") closeModal();
   });

   // Delegação para botões com data-download
   document.addEventListener("click", (e) => {
     const btn = e.target.closest("[data-download]");
     if(!btn) return;

     const url = btn.getAttribute("data-download");
     if(!url) return;

     // Se quiser liberar sem termo quando já aceitou:
     // if(localStorage.getItem("bahia_terms_accepted") === "yes"){ window.location.href = url; return; }

     openModal(url);
   });

   // Busca
   q.addEventListener("input", () => {
     const value = q.value.trim();
     renderModules(value);
   });

   // Inicial
   renderModules();
 </script>
</body>
</html>