{"id":4429,"date":"2026-10-07T12:02:05","date_gmt":"2026-10-07T15:02:05","guid":{"rendered":"https:\/\/sbeb.org.br\/cbeb2026\/?page_id=4429"},"modified":"2026-10-13T14:49:42","modified_gmt":"2026-10-13T17:49:42","slug":"certificados","status":"publish","type":"page","link":"https:\/\/sbeb.org.br\/cbeb2026\/certificados\/","title":{"rendered":"Certificados"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4429\" class=\"elementor elementor-4429\" data-elementor-settings=\"{&quot;ha_cmc_init_switcher&quot;:&quot;no&quot;}\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4998246 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-parent\" data-id=\"4998246\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0217b56 elementor-widget elementor-widget-html\" data-id=\"0217b56\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"sbeb-cert\">\n  <style>\n    .sbeb-cert {\n      --azul: #0d2a5e;\n      --azul2: #1b4f9a;\n      --ciano: #00AECC;\n      --texto: #333333;\n      font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n      color: var(--texto);\n      max-width: 1160px;\n      margin: 0 auto;\n      padding: 10px 0 30px;\n      line-height: 1.6;\n      box-sizing: border-box;\n    }\n    .sbeb-cert *, .sbeb-cert *::before, .sbeb-cert *::after { box-sizing: border-box; }\n\n    .sbeb-cert-abas {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 8px;\n      justify-content: center;\n      margin-bottom: 18px;\n    }\n    .sbeb-cert-aba {\n      background: #FFFFFF !important;\n      color: var(--azul2) !important;\n      border: 2px solid var(--azul2) !important;\n      border-radius: 6px !important;\n      padding: 11px 26px !important;\n      font-family: inherit !important;\n      font-size: 0.95rem !important;\n      font-weight: 700 !important;\n      line-height: 1.2 !important;\n      text-transform: uppercase;\n      letter-spacing: 0.3px;\n      cursor: pointer;\n      transition: background-color 0.2s ease, color 0.2s ease;\n    }\n    .sbeb-cert-aba:hover:not(.ativa) {\n      background: #F0F6FC !important;\n      color: var(--azul) !important;\n      border-color: var(--azul) !important;\n    }\n    .sbeb-cert-aba.ativa,\n    .sbeb-cert-aba.ativa:hover {\n      background: var(--azul2) !important;\n      color: #FFFFFF !important;\n      border-color: var(--azul2) !important;\n    }\n\n    .sbeb-cert-painel { display: none; }\n    .sbeb-cert-painel.ativo { display: block; }\n\n    .sbeb-cert-topo {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: center;\n      justify-content: space-between;\n      gap: 10px;\n      background: #F4F8FC;\n      border-left: 4px solid var(--ciano);\n      border-radius: 6px;\n      padding: 10px 16px;\n      margin-bottom: 12px;\n    }\n    .sbeb-cert-topo p { margin: 0; font-size: 0.9rem; color: #555; }\n    .sbeb-cert-topo a {\n      color: var(--azul2) !important;\n      font-size: 0.88rem;\n      font-weight: 600;\n      text-decoration: underline;\n      white-space: nowrap;\n    }\n\n    .sbeb-cert-moldura {\n      border: 1px solid #D0E4F0;\n      border-radius: 8px;\n      overflow: hidden;\n      background: #FFFFFF;\n    }\n    .sbeb-cert-moldura iframe {\n      display: block;\n      width: 100%;\n      height: 1000px;\n      border: 0;\n    }\n\n    @media (max-width: 782px) {\n      .sbeb-cert-aba { width: 100%; padding: 11px 16px !important; }\n      .sbeb-cert-moldura iframe { height: 80vh; min-height: 560px; }\n      .sbeb-cert-topo { flex-direction: column; align-items: flex-start; }\n    }\n  <\/style>\n\n  <div class=\"sbeb-cert-abas\">\n    <button type=\"button\" class=\"sbeb-cert-aba ativa\" onclick=\"sbebCertAba(this,'premios')\">Pr\u00eamios SBEB<\/button>\n    <button type=\"button\" class=\"sbeb-cert-aba\" onclick=\"sbebCertAba(this,'cbeb')\">CBEB 2026<\/button>\n  <\/div>\n\n  <div id=\"sbeb-cert-premios\" class=\"sbeb-cert-painel ativo\">\n\n<!-- CBEB 2026 | CENTRAL DE CERTIFICADOS \u00b7 PARA WIDGET HTML DO ELEMENTOR -->\n<section id=\"cbeb-certificados-v2\" aria-labelledby=\"cbeb-cert-title\" data-api-url=\"https:\/\/script.google.com\/macros\/s\/AKfycbzMTCBBNa3-VQ4ZuKhoPzaILa0v8BOXQdm_uY3gceLQL1uTrAIP5jEBkhFelJJrzZJe\/exec\">\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:wght@400;500;600;700;800&family=Outfit:wght@500;600;700;800&display=swap\" rel=\"stylesheet\">\n  <style>\n    #cbeb-certificados-v2{--azul:#005BC5;--navy:#132644;--amarelo:#FFC805;--laranja:#FF6C00;--ink:#243652;--muted:#5D6D85;--line:#DDE8F5;--bg:#F5F8FD;--card:#fff;color:var(--ink);font-family:'DM Sans',system-ui,sans-serif;max-width:1160px;margin:0 auto;padding:18px 14px 66px;line-height:1.5;isolation:isolate}\n    #cbeb-certificados-v2 *,#cbeb-certificados-v2 *:before,#cbeb-certificados-v2 *:after{box-sizing:border-box}\n    #cbeb-certificados-v2 button,#cbeb-certificados-v2 input,#cbeb-certificados-v2 select{font:inherit}\n    #cbeb-certificados-v2 a{text-decoration:none}\n    #cbeb-certificados-v2 .cc-head{border-radius:23px;border:1px solid var(--line);background:linear-gradient(125deg,#FFFFFF,#F5F9FF);padding:26px 28px;position:relative;overflow:hidden}\n    #cbeb-certificados-v2 .cc-head:before{content:\"\";position:absolute;top:0;left:0;right:0;height:5px;background:linear-gradient(90deg,var(--azul) 0 75%,var(--amarelo) 75% 91%,var(--laranja) 91%)}\n    #cbeb-certificados-v2 .cc-eyebrow{display:inline-flex;align-items:center;gap:7px;font-family:'Outfit',sans-serif;color:var(--azul);font-size:.76rem;text-transform:uppercase;letter-spacing:.095em;font-weight:800;margin-bottom:8px}\n    #cbeb-certificados-v2 h2,#cbeb-certificados-v2 h3,#cbeb-certificados-v2 h4{font-family:'Outfit',sans-serif}\n    #cbeb-certificados-v2 .cc-head h2{margin:0;color:var(--navy);font-size:clamp(1.65rem,3.3vw,2.65rem);line-height:1.08;letter-spacing:-.035em;font-weight:800}\n    #cbeb-certificados-v2 .cc-head h2 em{color:var(--azul);font-style:normal}\n    #cbeb-certificados-v2 .cc-head p{margin:9px 0 0;color:var(--muted);font-size:.94rem;max-width:780px}\n    #cbeb-certificados-v2 .cc-category-intro{margin:14px 0 8px;color:var(--navy);font-family:'Outfit',sans-serif;font-size:.84rem;font-weight:700}\n    #cbeb-certificados-v2 .cc-certificate-types{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 2px}\n    #cbeb-certificados-v2 .cc-certificate-types span{display:inline-flex;align-items:center;min-height:32px;padding:6px 12px;border:1px solid #CADFF6;border-radius:999px;background:#EBF4FF;color:#134F99;font-size:.76rem;line-height:1.25;font-weight:800}\n    #cbeb-certificados-v2 .cc-certificate-types span:nth-child(2){background:#FFF9E5;border-color:#F2D98D;color:#765700}\n    #cbeb-certificados-v2 .cc-search-panel{background:#fff;border:1px solid var(--line);border-radius:22px;padding:20px;margin-top:14px;box-shadow:0 8px 28px rgba(19,38,68,.045)}\n    #cbeb-certificados-v2 .cc-label{display:block;font-family:'Outfit',sans-serif;font-size:.85rem;color:var(--navy);font-weight:700;margin-bottom:8px}\n    #cbeb-certificados-v2 .cc-search{display:flex;gap:10px;align-items:center;padding:0 14px;border:2px solid #C9DDF4;border-radius:13px;transition:.2s;background:#fff}\n    #cbeb-certificados-v2 .cc-search:focus-within{border-color:var(--azul);box-shadow:0 0 0 3px rgba(0,91,197,.10)}\n    #cbeb-certificados-v2 .cc-search svg{width:20px;height:20px;flex:0 0 auto;stroke:var(--azul)}\n    #cbeb-certificados-v2 #cc-nome{height:54px;flex:1;border:0!important;outline:0!important;box-shadow:none!important;min-width:0;background:transparent!important;color:var(--navy);font-size:1rem;font-weight:600;padding:0}\n    #cbeb-certificados-v2 #cc-nome::placeholder{color:#8391A4;font-weight:400}\n    #cbeb-certificados-v2 #cc-limpar{background:transparent;border:0;color:var(--azul);font-size:.81rem;font-weight:800;cursor:pointer;padding:8px}\n    #cbeb-certificados-v2 .cc-filter-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px}\n    #cbeb-certificados-v2 .cc-select{width:100%;background:#F8FAFE;border:1px solid var(--line);border-radius:11px;padding:11px 13px;color:var(--navy);font-size:.87rem;font-weight:650;min-height:47px;cursor:pointer}\n    #cbeb-certificados-v2 .cc-select:focus-visible{outline:2px solid var(--azul);outline-offset:2px}\n    #cbeb-certificados-v2 .cc-help{margin:13px 0 0;font-size:.77rem;color:var(--muted)}\n    #cbeb-certificados-v2 .cc-results-title{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:21px 0 12px}\n    #cbeb-certificados-v2 .cc-results-title h3{margin:0;color:var(--navy);font-weight:800;font-size:1.22rem;letter-spacing:-.02em}\n    #cbeb-certificados-v2 #cc-contador{font-size:.81rem;color:var(--muted);font-weight:700;text-align:right}\n    #cbeb-certificados-v2 .cc-results{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px}\n    #cbeb-certificados-v2 .cc-card{background:var(--card);border:1px solid var(--line);border-radius:15px;padding:17px;display:flex;gap:12px;box-shadow:0 4px 14px rgba(19,38,68,.03);min-width:0}\n    #cbeb-certificados-v2 .cc-file-icon{flex:0 0 44px;height:44px;display:grid;place-items:center;border-radius:12px;background:#EBF4FF;color:var(--azul)}\n    #cbeb-certificados-v2 .cc-file-icon svg{width:22px;height:22px}\n    #cbeb-certificados-v2 .cc-card-content{min-width:0;flex:1}\n    #cbeb-certificados-v2 .cc-card h4{margin:0 0 4px;color:var(--navy);font-size:.98rem;font-weight:700;line-height:1.22;overflow-wrap:anywhere}\n    #cbeb-certificados-v2 .cc-card-category{font-size:.75rem;color:var(--muted);margin:0;line-height:1.4}\n    #cbeb-certificados-v2 .cc-card-detail{font-size:.72rem;color:#8A5D00;font-weight:700;margin-top:5px}\n    #cbeb-certificados-v2 .cc-actions{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}\n    #cbeb-certificados-v2 .cc-action{border-radius:9px;border:1px solid #C9DBF0;background:#fff;padding:8px 10px;font-size:.77rem;font-weight:800;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:36px;line-height:1.1;color:var(--azul)!important;transition:.15s}\n    #cbeb-certificados-v2 .cc-action:hover{background:#EBF4FF}\n    #cbeb-certificados-v2 .cc-action--primary{background:var(--azul);border-color:var(--azul);color:#fff!important}\n    #cbeb-certificados-v2 .cc-action--primary:hover{background:#064d9e;color:#fff!important}\n    #cbeb-certificados-v2 .cc-action--download{background:var(--amarelo);border-color:#EFC000;color:#132644!important}\n    #cbeb-certificados-v2 .cc-action--download:hover{background:#FFDB47;color:#132644!important}\n    #cbeb-certificados-v2 .cc-empty{border:1px dashed #C5D8EE;background:#F8FAFE;border-radius:15px;padding:25px 19px;color:var(--muted);text-align:center;font-size:.9rem}\n    #cbeb-certificados-v2 [hidden]{display:none!important}\n    #cbeb-certificados-v2 .cc-empty strong{color:var(--navy);display:block;font-family:'Outfit',sans-serif;font-size:1rem;margin-bottom:4px}\n    #cbeb-certificados-v2 .cc-more-wrap{text-align:center;margin-top:16px}\n    #cbeb-certificados-v2 #cc-more{cursor:pointer;background:#fff;color:var(--azul);font-weight:800;border:1px solid #B7D1EF;border-radius:10px;padding:10px 16px}\n    #cbeb-certificados-v2 .cc-modal{position:fixed;inset:0;z-index:999999;background:rgba(16,29,48,.78);display:none;padding:14px;align-items:center;justify-content:center}\n    #cbeb-certificados-v2 .cc-modal.cc-open{display:flex}\n    #cbeb-certificados-v2 .cc-dialog{background:#fff;width:min(1050px,100%);height:min(91vh,860px);border-radius:17px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 24px 70px rgba(0,0,0,.26)}\n    #cbeb-certificados-v2 .cc-dialog-head{padding:12px 16px;display:flex;justify-content:space-between;align-items:center;gap:12px;border-bottom:1px solid var(--line)}\n    #cbeb-certificados-v2 .cc-dialog-head strong{display:block;color:var(--navy);font-family:'Outfit',sans-serif;font-size:.98rem}\n    #cbeb-certificados-v2 .cc-dialog-head small{color:var(--muted);font-size:.72rem;display:block;margin-top:3px}\n    #cbeb-certificados-v2 .cc-dialog-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}\n    #cbeb-certificados-v2 #cc-close{width:36px;height:36px;border:0;border-radius:50%;background:#EDF2FA;color:var(--navy);cursor:pointer;font-size:1.45rem}\n    #cbeb-certificados-v2 #cc-frame{border:0;width:100%;height:100%;flex:1;background:#F2F5F8}\n    @media(max-width:750px){#cbeb-certificados-v2 .cc-results{grid-template-columns:1fr}#cbeb-certificados-v2 .cc-head{padding:20px}#cbeb-certificados-v2 .cc-filter-row{grid-template-columns:1fr}#cbeb-certificados-v2 .cc-dialog-head{align-items:flex-start;flex-direction:column}#cbeb-certificados-v2 .cc-dialog-actions{width:100%;justify-content:flex-start}}\n    @media(max-width:450px){#cbeb-certificados-v2{padding:12px 8px 45px}#cbeb-certificados-v2 .cc-search-panel{padding:14px}#cbeb-certificados-v2 .cc-card{padding:13px}#cbeb-certificados-v2 .cc-file-icon{flex-basis:36px;height:36px}}\n\n    #cbeb-certificados-v2 .cc-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:13px;flex-wrap:wrap}\n    #cbeb-certificados-v2 .cc-refresh{cursor:pointer;background:#fff;border:1px solid #BED3ED;color:var(--azul);border-radius:10px;padding:8px 12px;font-size:.78rem;font-weight:800;transition:.2s}\n    #cbeb-certificados-v2 .cc-refresh:hover{background:#EDF5FF}\n    #cbeb-certificados-v2 .cc-refresh:disabled{opacity:.55;cursor:wait}\n    #cbeb-certificados-v2 .cc-sync-status{color:var(--muted);font-size:.76rem;font-weight:600;min-height:18px}\n    #cbeb-certificados-v2 .cc-sync-status.cc-status-error{color:#B32D2E}\n    #cbeb-certificados-v2 .cc-certificate-types span{white-space:normal;max-width:100%}\n    #cbeb-certificados-v2 .cc-select:disabled{opacity:.7}\n    #cbeb-certificados-v2 .cc-card-category{overflow-wrap:anywhere}\n  <\/style>\n  <div class=\"cc-head\">\n    <span class=\"cc-eyebrow\">CBEB 2026 \u00b7 Certificados<\/span>\n    <h2 id=\"cbeb-cert-title\">Encontre seu <em>certificado<\/em><\/h2>\n    <div class=\"cc-category-intro\">Certificados dispon\u00edveis para:<\/div>\n    <div id=\"cc-tipos\" class=\"cc-certificate-types\" aria-label=\"Tipos de certificados dispon\u00edveis\"><span>Carregando categorias\u2026<\/span><\/div>\n    <p>Busque pelo nome ou selecione uma categoria. Visualize seu certificado em PDF e fa\u00e7a o download.<\/p>\n  <\/div>\n  <div class=\"cc-search-panel\">\n    <label class=\"cc-label\" for=\"cc-nome\">Nome no certificado<\/label>\n    <div class=\"cc-search\">\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"11\" r=\"7\"><\/circle><path d=\"m20 20-4-4\"><\/path><\/svg>\n      <input id=\"cc-nome\" type=\"search\" placeholder=\"Digite seu nome ou sobrenome...\" autocomplete=\"off\" spellcheck=\"false\">\n      <button type=\"button\" id=\"cc-limpar\">Limpar<\/button>\n    <\/div>\n    <div class=\"cc-filter-row\">\n      <div><label class=\"cc-label\" for=\"cc-grupo\">Categoria<\/label><select id=\"cc-grupo\" class=\"cc-select\"><option value=\"all\">Todas as categorias<\/option><\/select><\/div>\n      <div><label class=\"cc-label\" for=\"cc-sub\">Atividade \/ Subcategoria<\/label><select id=\"cc-sub\" class=\"cc-select\"><option value=\"all\">Todas as atividades<\/option><\/select><\/div>\n    <\/div>\n    <p class=\"cc-help\">A busca ignora diferen\u00e7as entre letras mai\u00fasculas, min\u00fasculas e acentos. Uma pessoa pode ter mais de um certificado.<\/p>\n    <div class=\"cc-toolbar\"><span id=\"cc-sync-status\" class=\"cc-sync-status\" role=\"status\">Conectando ao cat\u00e1logo\u2026<\/span><button id=\"cc-refresh\" class=\"cc-refresh\" type=\"button\">Atualizar lista<\/button><\/div>\n  <\/div>\n  <div class=\"cc-results-title\"><h3>Resultados da pesquisa<\/h3><span id=\"cc-contador\" aria-live=\"polite\"><\/span><\/div>\n  <div id=\"cc-resultados\" class=\"cc-results\" aria-live=\"polite\"><\/div>\n  <div id=\"cc-empty\" class=\"cc-empty\" role=\"status\"><strong>Encontre o certificado pelo nome<\/strong>Comece digitando pelo menos 2 letras ou escolha uma categoria para navegar.<\/div>\n  <div class=\"cc-more-wrap\"><button id=\"cc-more\" type=\"button\" hidden>Mostrar mais certificados<\/button><\/div>\n  <div id=\"cc-modal\" class=\"cc-modal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Visualiza\u00e7\u00e3o do certificado\" aria-hidden=\"true\">\n    <div class=\"cc-dialog\"><div class=\"cc-dialog-head\"><div><strong id=\"cc-modal-title\">Certificado<\/strong><small id=\"cc-modal-cat\"><\/small><\/div><div class=\"cc-dialog-actions\"><a id=\"cc-modal-open\" class=\"cc-action\" target=\"_blank\" rel=\"noopener noreferrer\">Abrir no Drive<\/a><a id=\"cc-modal-download\" class=\"cc-action cc-action--download\" target=\"_blank\" rel=\"noopener noreferrer\">Baixar PDF<\/a><button id=\"cc-close\" type=\"button\" aria-label=\"Fechar visualiza\u00e7\u00e3o\">\u00d7<\/button><\/div><\/div><iframe id=\"cc-frame\" title=\"Visualiza\u00e7\u00e3o do certificado em PDF\" loading=\"lazy\" referrerpolicy=\"no-referrer\"><\/iframe><\/div>\n  <\/div>\n  <script>\n(function () {\n  'use strict';\n  const root = document.getElementById('cbeb-certificados-v2');\n  if (!root) return;\n  const $ = (selector) => root.querySelector(selector);\n  \/\/ Insira uma \u00fanica vez a URL \/exec implantada no Apps Script.\n  const API_URL = root.getAttribute('data-api-url') || '';\n  const validUrl = \/^https:\\\/\\\/script\\.google\\.com\\\/macros\\\/s\\\/[A-Za-z0-9_-]+\\\/exec(?:\\?.*)?$\/.test(API_URL);\n  const nameInput = $('#cc-nome'), groupSelect = $('#cc-grupo'), subSelect = $('#cc-sub');\n  const resultBox = $('#cc-resultados'), counter = $('#cc-contador');\n  const empty = $('#cc-empty'), more = $('#cc-more'), status = $('#cc-sync-status');\n  const refreshButton = $('#cc-refresh'), badges = $('#cc-tipos');\n  const modal = $('#cc-modal'), frame = $('#cc-frame');\n  let activeRequest = 0, currentScript = null, currentCallback = '', currentTimer = null;\n  let busy = false, groups = [], subcategories = [], lastFocus = null;\n  let offset = 0, available = 0, debounce = null;\n  const pageSize = 24;\n  const norm = (s) => String(s || '').normalize('NFD')\n    .replace(\/[\u0300-\u036f]\/g, '').toLowerCase().replace(\/[^a-z0-9]+\/g, ' ').trim();\n  const preview = (id) => 'https:\/\/drive.google.com\/file\/d\/' + encodeURIComponent(id) + '\/preview';\n  const view = (id) => 'https:\/\/drive.google.com\/file\/d\/' + encodeURIComponent(id) + '\/view';\n  const download = (id) => 'https:\/\/drive.google.com\/uc?export=download&id=' + encodeURIComponent(id);\n  const getGroup = (id) => groups.find((g) => g.id === id);\n\n  function showStatus(text, error) {\n    status.textContent = text;\n    status.classList.toggle('cc-status-error', Boolean(error));\n    status.setAttribute('role', error ? 'alert' : 'status');\n  }\n  function showEmpty(heading, description) {\n    empty.replaceChildren();\n    const strong = document.createElement('strong');\n    strong.textContent = heading;\n    empty.append(strong, document.createTextNode(description));\n    empty.hidden = false;\n  }\n  function updateGroups() {\n    const current = groupSelect.value;\n    groupSelect.replaceChildren(new Option('Todas as categorias', 'all'));\n    groups.forEach((group) => {\n      const suffix = group.count === 0 ? ' \u00b7 em breve' : '';\n      groupSelect.add(new Option(group.label + suffix, group.id));\n    });\n    groupSelect.value = groups.some(g => g.id === current) ? current : 'all';\n    if (!groupSelect.value) groupSelect.value = 'all';\n    badges.replaceChildren();\n    groups.forEach((group) => {\n      const tag = document.createElement('span');\n      tag.textContent = group.label + (group.count === 0 ? ' \u00b7 em breve' : '');\n      badges.append(tag);\n    });\n  }\n  function updateSubs() {\n    const current = subSelect.value;\n    const group = groupSelect.value;\n    subSelect.replaceChildren(new Option('Todas as atividades', 'all'));\n    subcategories.filter((sub) => group === 'all' || sub.groupId === group)\n      .forEach((sub) => subSelect.add(new Option(sub.title, sub.id)));\n    const exists = [...subSelect.options].some((option) => option.value === current);\n    subSelect.value = exists ? current : 'all';\n  }\n  function updateMeta(data) {\n    groups = data.groups || [];\n    subcategories = data.subs || [];\n    updateGroups();\n    updateSubs();\n    const date = data.checkedAt && new Date(data.checkedAt);\n    showStatus(date && !Number.isNaN(date.getTime())\n      ? 'Cat\u00e1logo atualizado em ' + date.toLocaleString('pt-BR', {day:'2-digit',month:'2-digit',hour:'2-digit',minute:'2-digit'}) + '.'\n      : 'Cat\u00e1logo sincronizado com o Google Drive.');\n  }\n  function cleanupRequest() {\n    if (currentTimer) { clearTimeout(currentTimer); currentTimer = null; }\n    if (currentScript) { currentScript.remove(); currentScript = null; }\n    if (currentCallback) {\n      \/\/ Em requisi\u00e7\u00f5es canceladas uma resposta atrasada n\u00e3o altera os resultados.\n      const obsolete = currentCallback;\n      window[obsolete] = function () {};\n      setTimeout(() => { try { delete window[obsolete]; } catch (_) {} }, 90000);\n      currentCallback = '';\n    }\n  }\n  function requestIndex(reset, refresh) {\n    clearTimeout(debounce);\n    if (!validUrl) {\n      showStatus('Integra\u00e7\u00e3o ainda n\u00e3o ativada. Configure a URL do Google Apps Script no c\u00f3digo do Elementor.', true);\n      showEmpty('Configura\u00e7\u00e3o pendente', 'Publique o Google Apps Script e cole sua URL \/exec no campo data-api-url deste c\u00f3digo.');\n      return;\n    }\n    if (reset) {\n      offset = 0; available = 0; resultBox.replaceChildren(); more.hidden = true;\n    }\n    const thisRequest = ++activeRequest;\n    cleanupRequest();\n    busy = true;\n    refreshButton.disabled = true;\n    more.disabled = true;\n    showStatus(refresh ? 'Atualizando o cat\u00e1logo do Google Drive\u2026' : 'Consultando certificados\u2026');\n    if (reset) showEmpty('Consultando certificados', 'Aguarde um instante\u2026');\n    const callback = 'cbebCertCb_' + Date.now().toString(36) + '_' + thisRequest;\n    currentCallback = callback;\n    const params = new URLSearchParams({\n      prefix: callback,\n      q: nameInput.value.trim(),\n      group: groupSelect.value,\n      sub: subSelect.value,\n      offset: String(offset),\n      limit: String(pageSize)\n    });\n    if (refresh) params.set('refresh', '1');\n    const script = document.createElement('script');\n    const fail = () => {\n      if (thisRequest !== activeRequest) return;\n      busy = false; refreshButton.disabled = false; more.disabled = false;\n      cleanupRequest();\n      showStatus('N\u00e3o foi poss\u00edvel consultar o Google Drive. Tente atualizar a p\u00e1gina ou verifique a implanta\u00e7\u00e3o do Apps Script.', true);\n      if (reset) showEmpty('Consulta indispon\u00edvel', 'Tente novamente usando o bot\u00e3o \u201cAtualizar lista\u201d.');\n    };\n    window[callback] = (data) => {\n      if (thisRequest !== activeRequest) return;\n      busy = false; refreshButton.disabled = false; more.disabled = false;\n      cleanupRequest();\n      if (!data || !data.ok) {\n        showStatus((data && data.error) || 'N\u00e3o foi poss\u00edvel consultar os certificados.', true);\n        if (reset) showEmpty('N\u00e3o foi poss\u00edvel carregar os certificados', 'Tente novamente em instantes.');\n        return;\n      }\n      updateMeta(data);\n      available = Number(data.total) || 0;\n      const isBrowsing = groupSelect.value !== 'all' || subSelect.value !== 'all';\n      const isQuery = norm(nameInput.value).length >= 2;\n      if (!isQuery && !isBrowsing) {\n        counter.textContent = '';\n        empty.hidden = false;\n        showEmpty('Pesquise pelo nome', 'Digite ao menos 2 letras do nome ou escolha uma categoria para navegar.');\n        more.hidden = true;\n        return;\n      }\n      const items = data.items || [];\n      resultBox.append(...items.map(makeCard));\n      offset += items.length;\n      counter.textContent = available === 1 ? '1 certificado encontrado' : available + ' certificados encontrados';\n      empty.hidden = available > 0;\n      if (!available) showEmpty('Nenhum certificado localizado', 'Tente outro nome, sobrenome ou categoria. Os PDFs ainda n\u00e3o publicados n\u00e3o aparecem na busca.');\n      more.hidden = offset >= available || items.length === 0;\n    };\n    script.onerror = fail;\n    script.src = API_URL + (API_URL.includes('?') ? '&' : '?') + params.toString();\n    currentScript = script;\n    currentTimer = setTimeout(fail, 45000);\n    document.head.append(script);\n  }\n  function openModal(item) {\n    lastFocus = document.activeElement;\n    const group = getGroup(item.g);\n    $('#cc-modal-title').textContent = item.n;\n    $('#cc-modal-cat').textContent = [group ? group.label : 'Certificado', item.cat, item.d].filter(Boolean).join(' \u00b7 ');\n    $('#cc-modal-open').href = view(item.f);\n    $('#cc-modal-download').href = download(item.f);\n    frame.src = preview(item.f);\n    modal.classList.add('cc-open');\n    modal.setAttribute('aria-hidden', 'false');\n    $('#cc-close').focus();\n  }\n  function closeModal() {\n    modal.classList.remove('cc-open');\n    modal.setAttribute('aria-hidden', 'true');\n    frame.src = 'about:blank';\n    if (lastFocus && lastFocus.focus) lastFocus.focus();\n  }\n  function makeCard(item) {\n    const group = getGroup(item.g);\n    const article = document.createElement('article'); article.className = 'cc-card';\n    const icon = document.createElement('div'); icon.className = 'cc-file-icon';\n    icon.innerHTML = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><path d=\"M7 2h7l5 5v15H7a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Z\"\/><path d=\"M14 2v6h5M9 13h6M9 17h5\"\/><\/svg>';\n    const content = document.createElement('div'); content.className = 'cc-card-content';\n    const title = document.createElement('h4'); title.textContent = item.n;\n    const category = document.createElement('p'); category.className = 'cc-card-category';\n    category.textContent = [group ? group.label : 'Certificados', item.cat].filter(Boolean).join(' \u00b7 ');\n    content.append(title, category);\n    if (item.d) {\n      const detail = document.createElement('div'); detail.className = 'cc-card-detail';\n      detail.textContent = item.d; content.append(detail);\n    }\n    const actions = document.createElement('div'); actions.className = 'cc-actions';\n    const show = document.createElement('button'); show.type = 'button'; show.className = 'cc-action cc-action--primary'; show.textContent = 'Visualizar PDF';\n    show.addEventListener('click', () => openModal(item));\n    const save = document.createElement('a'); save.href = download(item.f); save.className = 'cc-action cc-action--download'; save.target = '_blank'; save.rel = 'noopener noreferrer'; save.textContent = 'Baixar PDF';\n    const open = document.createElement('a'); open.href = view(item.f); open.className = 'cc-action'; open.target = '_blank'; open.rel = 'noopener noreferrer'; open.textContent = 'Abrir no Drive';\n    actions.append(show, save, open); content.append(actions); article.append(icon, content);\n    return article;\n  }\n  groupSelect.addEventListener('change', () => { updateSubs(); requestIndex(true, false); });\n  subSelect.addEventListener('change', () => requestIndex(true, false));\n  nameInput.addEventListener('input', () => {\n    clearTimeout(debounce);\n    \/\/ Impede que o resultado de uma busca anterior reapare\u00e7a enquanto digitamos.\n    activeRequest++; cleanupRequest();\n    debounce = setTimeout(() => requestIndex(true, false), 330);\n  });\n  $('#cc-limpar').addEventListener('click', () => {\n    nameInput.value = ''; groupSelect.value = 'all'; updateSubs(); requestIndex(true, false); nameInput.focus();\n  });\n  refreshButton.addEventListener('click', () => requestIndex(true, true));\n  more.addEventListener('click', () => { if (!busy) requestIndex(false, false); });\n  $('#cc-close').addEventListener('click', closeModal);\n  modal.addEventListener('click', (event) => { if (event.target === modal) closeModal(); });\n  document.addEventListener('keydown', (event) => { if (event.key === 'Escape' && modal.classList.contains('cc-open')) closeModal(); });\n  requestIndex(true, false);\n})();\n\n<\/script>\n<\/section>\n\n  <\/div>\n\n  <div id=\"sbeb-cert-cbeb\" class=\"sbeb-cert-painel\">\n    <div class=\"sbeb-cert-topo\">\n      <p>Consulte os certificados do CBEB 2026.<\/p>\n      <a href=\"https:\/\/certificado.softaliza.com.br\/congresso-brasileiro-de-engenharia-biomedica-cbeb-2026\" target=\"_blank\" rel=\"noopener noreferrer\">Abrir em nova aba &rarr;<\/a>\n    <\/div>\n    <div class=\"sbeb-cert-moldura\">\n      <iframe data-src=\"https:\/\/certificado.softaliza.com.br\/congresso-brasileiro-de-engenharia-biomedica-cbeb-2026\" title=\"Certificados CBEB 2026\" loading=\"lazy\"><\/iframe>\n    <\/div>\n  <\/div>\n\n  <script>\n  function sbebCertAba(btn, id) {\n    var wrap = btn.closest('.sbeb-cert');\n    wrap.querySelectorAll('.sbeb-cert-aba').forEach(function (b) { b.classList.remove('ativa'); });\n    wrap.querySelectorAll('.sbeb-cert-painel').forEach(function (p) { p.classList.remove('ativo'); });\n    btn.classList.add('ativa');\n    var painel = wrap.querySelector('#sbeb-cert-' + id);\n    painel.classList.add('ativo');\n    var frame = painel.querySelector('iframe[data-src]');\n    if (frame) { frame.src = frame.getAttribute('data-src'); frame.removeAttribute('data-src'); }\n  }\n  <\/script>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Pr\u00eamios SBEB CBEB 2026 CBEB 2026 \u00b7 Certificados Encontre seu certificado Certificados dispon\u00edveis para: Carregando categorias\u2026 Busque pelo nome ou selecione uma categoria. Visualize seu certificado em PDF e fa\u00e7a o download. Nome no certificado Limpar CategoriaTodas as categorias Atividade \/ SubcategoriaTodas as atividades A busca ignora diferen\u00e7as entre letras mai\u00fasculas, min\u00fasculas e acentos. Uma pessoa pode ter mais de um certificado. Conectando ao cat\u00e1logo\u2026Atualizar lista Resultados da pesquisa Encontre o certificado pelo nomeComece digitando pelo menos 2 letras ou escolha uma categoria para navegar. Mostrar mais certificados CertificadoAbrir no DriveBaixar PDF\u00d7 Consulte os certificados do CBEB 2026. Abrir em nova aba &rarr;<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-4429","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/sbeb.org.br\/cbeb2026\/wp-json\/wp\/v2\/pages\/4429","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sbeb.org.br\/cbeb2026\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sbeb.org.br\/cbeb2026\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sbeb.org.br\/cbeb2026\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/sbeb.org.br\/cbeb2026\/wp-json\/wp\/v2\/comments?post=4429"}],"version-history":[{"count":13,"href":"https:\/\/sbeb.org.br\/cbeb2026\/wp-json\/wp\/v2\/pages\/4429\/revisions"}],"predecessor-version":[{"id":4452,"href":"https:\/\/sbeb.org.br\/cbeb2026\/wp-json\/wp\/v2\/pages\/4429\/revisions\/4452"}],"wp:attachment":[{"href":"https:\/\/sbeb.org.br\/cbeb2026\/wp-json\/wp\/v2\/media?parent=4429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}