{"id":129281,"date":"2025-10-07T20:16:19","date_gmt":"2025-10-07T23:16:19","guid":{"rendered":"https:\/\/www.fitnessbrasil.com.br\/?page_id=129281"},"modified":"2025-10-07T20:47:14","modified_gmt":"2025-10-07T23:47:14","slug":"programacao","status":"publish","type":"page","link":"https:\/\/www.fitnessbrasil.com.br\/es\/fitness-brasil-expo-2026\/programacao\/","title":{"rendered":"Programaci\u00f3n"},"content":{"rendered":"\n\t\t<div class=\"hidden\">\n\t\t\t\t\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\" crossorigin>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@300;400;500;600;700;800;900&#038;display=swap\" rel=\"stylesheet\">\n\n<style>\n\n\n\/* ====== Tipografia global Montserrat ====== *\/\nhtml, body {\n  font-family: \"Montserrat\", system-ui, -apple-system, \"Segoe UI\", Roboto,\n               \"Helvetica Neue\", Arial, \"Noto Sans\", \"Apple Color Emoji\",\n               \"Segoe UI Emoji\", \"Segoe UI Symbol\" !important;\n  font-weight: 400;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  text-rendering: optimizeLegibility;\n}\n\n\/* Pesos padr\u00e3o por hierarquia (ajuste se quiser) *\/\nh1, .h1 { font-weight: 800; font-family: \"Montserrat\";}\nh2, .h2 { font-weight: 800; font-weight: 800; font-family: \"Montserrat\";}\nh3, .h3 { font-weight: 700; font-weight: 800; font-family: \"Montserrat\";}\nh4, .h4 { font-weight: 600; font-weight: 800; font-family: \"Montserrat\";}\nstrong, b { font-weight: 700; font-weight: 800; font-family: \"Montserrat\";}\n\n\/* Componentes que voc\u00ea j\u00e1 usa: garantir pesos\/coer\u00eancia *\/\n.fb-hero-title       { font-weight: 800; }\n.fb-hero-sub         { font-weight: 400; }\n.fb-benefit__heading { font-weight: 700; }\n.fb-target__heading  { font-weight: 700; }\n.fb-speaker__name    { font-weight: 800; }\n.fb-price-card__title{ font-weight: 800; }\n\n\/* Evita \u201csintetizar\u201d peso\/it\u00e1lico em alguns browsers *\/\n@supports (font-synthesis: none) {\n  html { font-synthesis: none; }\n}\n\n\nbody{ background:#0c0813 !important; }\n\n.section.newsletter{ display:none; }\n\n#main, #wrapper{\n  background-color:#0c0813;\n  position:relative;\n}\n\n\/* CTA \u201cvagas limitadas\u201d *\/\n.vagas-limitadas img{\n  max-width:250px;\n  margin:30px 0;\n}\n\n\n\n<\/style>\n\t\t<\/div>\n\t\n\n\t<section class=\"section topo-logo\" id=\"section_802068545\">\n\t\t<div class=\"section-bg fill\" >\n\t\t\t\t\t\t\t\t\t\n\t\t\t\n\n\t\t<\/div>\n\n\t\t\n\n\t\t<div class=\"section-content relative\">\n\t\t\t\n\n\n\n<style>\n\/* ===== Linha slim, sem fundo\/borda extras ===== *\/\n.topo-logo{ background: transparent; }\n\n.topo-wrap{\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 10px;\n  height: 56px;                 \/* faixa fina *\/\n  display: flex;\n  align-items: center;          \/* centraliza verticalmente *\/\n  gap: 12px;\n}\n\n.topo-logo .col{ padding: 0 !important; }\n\n\/* LOGO (36px para alinhamento \u00f3tico com links\/bot\u00f5es) *\/\n.topo-logo__brand{ display:inline-flex; align-items:center; flex: 0 1 auto; }\n.topo-logo__brand img{ display:block; height:36px; width:auto; }\n\n\/* MENU DESKTOP *\/\n.topo-nav{ flex: 1 1 auto; }\n.topo-nav__list{\n  display:flex; gap:16px; align-items:center;\n  list-style:none; margin:0 !important; padding:0;\n}\n.topo-nav__list li{ margin:0 !important; }\n.topo-nav__link{\n  display:inline-flex; align-items:center;\n  height:36px; padding:0 10px; border-radius:999px;\n  text-decoration:none;\n  font-family:\"Montserrat\", system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial;\n  font-weight:700; font-size:14px; letter-spacing:.2px;\n  color:#000; opacity:.9; line-height:1;\n  transition: background-color .15s ease, opacity .15s ease;\n}\n.topo-nav__link:hover{ background:rgba(0,0,0,.06); opacity:1; }\n\n\/* ===== Bot\u00f5es unificados (burger + conta) ===== *\/\n.topo-btn,button.topo-btn{\n  display:inline-flex; align-items:center; justify-content:center;\n  gap:3px; height:36px; padding:0 12px; border:none;\n  border-radius:4px !important; background:#1f1f1f; color:#fff;\n  text-decoration:none; font-family:\"Montserrat\", system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial;\n  font-weight:700; font-size:13px; line-height:1; margin:0 !important;\n  align-content:center; flex-wrap:nowrap; flex-direction:column;\n}\n\n\/* Conta (roxo) mantendo dimens\u00f5es iguais *\/\n.btn-roxo{ background-color:#7536d8 !important; border-color:#7536d8 !important; color:#fff !important; }\n.topo-account__ico{ width:16px; height:16px; color:currentColor; }\n\n\/* Burger *\/\n.topo-burger{ width:38px; padding:0 9px; }\n.topo-burger__bar{ width:100%; height:2px; background:#fff; display:block; }\n\n\/* remove deslocamento manual *\/\na.topo-btn.btn-roxo.topo-account{\n  display:inline-flex; flex-direction:row; top:0 !important;\n  align-content:center; justify-content:flex-start; align-items:center; position:relative;\n}\n\n\/* ===== Visibilidade do burger por breakpoint ===== *\/\n\/* Desktop (>=769px): esconde o burger e o painel mobile *\/\n.topo-burger{ display:none !important; }\n@media (min-width:769px){\n  .topo-mobile-panel{ display:none !important; }\n}\n\n\/* ===== Mobile (<=768px) ===== *\/\n@media (max-width:768px){\n  .topo-wrap{ height:54px; gap:10px; }\n\n  \/* Oculta menu desktop no mobile *\/\n  .topo-nav{ display:none !important; }\n\n  \/* Mostra o burger *\/\n  .topo-burger{ display:inline-flex !important; }\n\n  \/* Layout: logo ocupa ~65%, bot\u00f5es o resto (respeitando suas colunas) *\/\n  .topo-logo__brand{ flex:1 1 65%; min-width:0; }\n  .topo-actions{\n    flex:0 0 35%;\n    display:flex; align-items:center; justify-content:flex-end; gap:8px;\n  }\n\n  \/* Logo um tiquinho maior no mobile *\/\n  .topo-logo__brand img{ height:38px; }\n}\n\n\/* Muito pequeno: esconder texto da conta, mantendo propor\u00e7\u00f5es *\/\n@media (max-width:420px){\n  .topo-account span{ display:none; }\n  .topo-account{ padding:0 10px; }\n}\n\n\/* ===== Dropdown Mobile ===== *\/\n\/* Base desktop (quando oculto) *\/\n.topo-mobile-panel{\n  position:relative;\n  inset:auto 0 auto 0;\n  max-width:1200px;\n  margin:0 auto;\n  padding:8px 0 10px;\n}\n\n\/* Vers\u00e3o mobile: painel fixo full-width, sempre acima de tudo *\/\n@media (max-width:768px){\n  .topo-mobile-panel{\n    position:fixed;        \/* sai da coluna e do fluxo da row *\/\n    left:0; right:0;\n    top:0;                 \/* JS ajusta a posi\u00e7\u00e3o exata abaixo do header *\/\n    width:100vw; max-width:100vw;\n    margin:0; padding:8px 0 10px;\n    z-index:2147483647;    \/* acima de qualquer t\u00edtulo\/se\u00e7\u00e3o *\/\n    background:transparent;\n  }\n  .topo-mobile-panel > nav{\n    max-width:1200px; margin:0 auto; padding:0 10px;\n  }\n}\n\n\/* Lista do menu mobile (skin) *\/\n.topo-mobile__list{\n  list-style:none; margin:0; padding:4px;\n  background:#fff; border:1px solid #e7e7e7; border-radius:12px;\n}\n.topo-mobile__list li{ border-bottom:1px solid #f2f2f2; }\n.topo-mobile__list li:last-child{ border-bottom:none; }\n.topo-mobile__list a{\n  display:block; padding:14px 14px; color:#1f1f1f; text-decoration:none;\n  font-family:\"Montserrat\", system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial;\n  font-size:15px; font-weight:600;\n}\n.topo-mobile__list a:hover{ background:#f7f7f7; }\n\n\/* Evita scroll do body com menu aberto (opcional) *\/\nbody.menu-open{ overflow:hidden; }\n<\/style>\n\n<script>\n\/* ===== MENU MOBILE: clona itens do desktop, abre\/fecha e posiciona ===== *\/\ndocument.addEventListener('DOMContentLoaded', function(){\n  const desktopList = document.getElementById('topo-menu');\n  let   panel       = document.getElementById('topo-mobile-panel');\n  const mobileList  = document.getElementById('topo-mobile-list');\n  const burger      = document.querySelector('.topo-burger');\n\n  if (!desktopList || !mobileList || !panel || !burger) return;\n\n  \/\/ Clona links do desktop para o mobile (uma vez)\n  if (!mobileList.dataset.filled) {\n    mobileList.innerHTML = desktopList.innerHTML;\n    mobileList.dataset.filled = '1';\n  }\n\n  \/\/ Mede a borda inferior do header (sua row de 3 colunas)\n  function headerBottom() {\n    const header = document.getElementById('row-176351036')\n                || document.querySelector('.topo-logo')\n                || document.body;\n    const r = header.getBoundingClientRect();\n    const y = (window.scrollY || window.pageYOffset || 0) + r.bottom;\n    return Math.max(0, y);\n  }\n\n  \/\/ Garante que o painel esteja direto no <body> no mobile (evita clipping)\n  function ensurePanelInBody(){\n    if (panel.parentElement !== document.body) {\n      panel = document.body.appendChild(panel);\n    }\n  }\n\n  function placePanel(){\n    panel.style.top = headerBottom() + 'px';\n  }\n\n  function openPanel(){\n    ensurePanelInBody();\n    placePanel();\n    panel.hidden = false;\n    burger.setAttribute('aria-expanded','true');\n    document.body.classList.add('menu-open');\n\n    const firstLink = mobileList.querySelector('a');\n    if (firstLink) { try { firstLink.focus({ preventScroll:true }); } catch(_){} }\n\n    document.addEventListener('click', onDocClick, { capture:true });\n    document.addEventListener('keydown', onEsc);\n    window.addEventListener('resize', placePanel);\n    window.addEventListener('scroll', placePanel, { passive:true });\n  }\n\n  function closePanel(){\n    panel.hidden = true;\n    burger.setAttribute('aria-expanded','false');\n    document.body.classList.remove('menu-open');\n\n    document.removeEventListener('click', onDocClick, { capture:true });\n    document.removeEventListener('keydown', onEsc);\n    window.removeEventListener('resize', placePanel);\n    window.removeEventListener('scroll', placePanel);\n  }\n\n  function togglePanel(){ panel.hidden ? openPanel() : closePanel(); }\n\n  function onDocClick(e){\n    if (panel.contains(e.target) || burger.contains(e.target)) return;\n    closePanel();\n  }\n  function onEsc(e){ if (e.key === 'Escape') closePanel(); }\n\n  burger.addEventListener('click', togglePanel);\n  mobileList.addEventListener('click', (e)=>{ if (e.target.closest('a')) closePanel(); });\n\n  \/\/ Fecha ao voltar para desktop\n  const mq = window.matchMedia('(max-width: 768px)');\n  if (mq && mq.addEventListener) {\n    mq.addEventListener('change', (ev)=>{ if (!ev.matches) closePanel(); });\n  } else if (mq && mq.addListener) {\n    mq.addListener((ev)=>{ if (!ev.matches) closePanel(); });\n  }\n});\n<\/script>\n\n<div class=\"row align-middle\"  id=\"row-253024018\">\n\n\n\t<div id=\"col-2055015660\" class=\"col medium-3 small-9 large-3\"  >\n\t\t\t\t<div class=\"col-inner text-left\"  >\n\t\t\t\n\t\t\t\n\n\t<div class=\"img has-hover x md-x lg-x y md-y lg-y\" id=\"image_1826268276\">\n\t\t<a class=\"\" href=\"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/\" >\t\t\t\t\t\t<div class=\"img-inner dark\" >\n\t\t\t<img decoding=\"async\" width=\"1\" height=\"1\" data-src=\"https:\/\/www.fitnessbrasil.com.br\/wp-content\/uploads\/2025\/09\/logo-FBE26.svg\" class=\"attachment-large size-large lazyload\" alt=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1px; --smush-placeholder-aspect-ratio: 1\/1;\" \/>\t\t\t\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\t\t\n<style>\n#image_1826268276 {\n  width: 100%;\n}\n<\/style>\n\t<\/div>\n\t\n\n\n\t\t<\/div>\n\t\t\t\t\n<style>\n#col-2055015660 > .col-inner {\n  padding: 0px 0px 0px 0px;\n  margin: 0px 0px 0px 0px;\n}\n<\/style>\n\t<\/div>\n\n\t\n\n\t<div id=\"col-1051748271\" class=\"col hide-for-small medium-7 small-1 large-7\"  >\n\t\t\t\t<div class=\"col-inner text-center\"  >\n\t\t\t\n\t\t\t\n\n\n\n<!-- MENU DESKTOP (oculto no mobile) -->\n    <nav class=\"topo-nav\" aria-label=\"Navega\u00e7\u00e3o principal\">\n      <ul class=\"topo-nav__list\" id=\"topo-menu\">\n        <li class=\"topo-nav__item\"><a class=\"topo-nav__link\" href=\"\/fitness-brasil-expo-2026\/\">In\u00edcio<\/a><\/li>\n        <li class=\"topo-nav__item\"><a class=\"topo-nav__link\" href=\"https:\/\/www.fitnessbrasil.com.br\/loja-2\/\">Cursos<\/a><\/li>\n        <li class=\"topo-nav__item\"><a class=\"topo-nav__link\" href=\"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/palestrantes\">Palestrantes<\/a><\/li>\n        <li class=\"topo-nav__item\"><a class=\"topo-nav__link\" href=\"https:\/\/www.fitnessbrasil.com.br\/guia-do-visitante-fitness-brasil-expo-2026\/\">Guia do Visitante<\/a><\/li>\n        <li class=\"topo-nav__item\"><a class=\"topo-nav__link\" href=\"https:\/\/marketing.fitnessbrasil.com.br\/fb-expo-2026-quero-ser-um-expositor\">Seja um expositor<\/a><\/li>\n        <li class=\"topo-nav__item\"><a class=\"topo-nav__link\" href=\"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/#tab_informa%C3%87%C3%95es-sobre-o-evento\">FAQ<\/a><\/li>\n      <\/ul>\n    <\/nav>\n\n\n\t\t<\/div>\n\t\t\t\t\n<style>\n#col-1051748271 > .col-inner {\n  padding: 0px 0px 0px 0px;\n  margin: 0px 0px 0px 0px;\n}\n<\/style>\n\t<\/div>\n\n\t\n\n\t<div id=\"col-1582816564\" class=\"col medium-2 small-3 large-2\"  >\n\t\t\t\t<div class=\"col-inner text-right\"  >\n\t\t\t\n\t\t\t\n\n\n\n<!-- A\u00c7\u00d5ES (ordem no mobile: burger \u2192 conta) -->\n    <div class=\"topo-actions\">\n      <!-- BURGER -->\n      <button class=\"topo-btn topo-burger\" aria-label=\"Abrir menu\" aria-expanded=\"false\" aria-controls=\"topo-mobile-panel\">\n        <span class=\"topo-burger__bar\"><\/span>\n        <span class=\"topo-burger__bar\"><\/span>\n        <span class=\"topo-burger__bar\"><\/span>\n      <\/button>\n\n      <!-- CONTA -->\n      <a class=\"topo-btn btn-roxo topo-account\" href=\"https:\/\/eventos.tmp.br\/fitness2026\/visitantes\/inicio_grupo.php\">\n        <svg class=\"topo-account__ico\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n          <path d=\"M12 12a5 5 0 1 0-5-5 5 5 0 0 0 5 5Z\" fill=\"currentColor\" opacity=\".9\"><\/path>\n          <path d=\"M4 20a8 8 0 0 1 16 0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><\/path>\n        <\/svg>\n        <span>Minha Conta<\/span>\n      <\/a>\n    <\/div>\n\n<!-- DROPDOWN MOBILE -->\n  <div class=\"topo-mobile-panel\" id=\"topo-mobile-panel\" hidden>\n    <nav aria-label=\"Menu mobile\">\n      <ul class=\"topo-mobile__list\" id=\"topo-mobile-list\"><!-- clonado via JS --><\/ul>\n    <\/nav>\n  <\/div>\n\n\n\t\t<\/div>\n\t\t\t\t\n<style>\n#col-1582816564 > .col-inner {\n  padding: 0px 0px 0px 0px;\n  margin: 0px 0px 0px 0px;\n}\n<\/style>\n\t<\/div>\n\n\t\n\n\n<style>\n#row-253024018 > .col > .col-inner {\n  padding: 0px 10px 0px 10px;\n}\n<\/style>\n<\/div>\n\n\t\t<\/div>\n\n\t\t\n<style>\n#section_802068545 {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: rgb(251, 246, 238);\n}\n<\/style>\n\t<\/section>\n\t\n\n\n\t<section class=\"section\" id=\"section_1834415290\">\n\t\t<div class=\"section-bg fill\" >\n\t\t\t\t\t\t\t\t\t\n\t\t\t\n\n\t\t<\/div>\n\n\t\t\n\n\t\t<div class=\"section-content relative\">\n\t\t\t\n\n<div class=\"row\"  id=\"row-1838271902\">\n\n\n\t<div id=\"col-1125217754\" class=\"col small-12 large-12\"  >\n\t\t\t\t<div class=\"col-inner\"  >\n\t\t\t\n\t\t\t\n\n        <div class=\"programacao-container\">\r\n            <!-- Filtros no topo -->\r\n            <div class=\"filters\">\r\n                <select id=\"filtro-dia\">\r\n                    <option value=\"\" disabled selected>Escolha o dia<\/option>\r\n                <\/select>\r\n\r\n                <select id=\"filtro-categoria\">\r\n                    <option value=\"\" disabled selected>Escolha a categoria<\/option>\r\n                <\/select>\r\n\r\n                <select id=\"filtro-curso\">\r\n                    <option value=\"\" disabled selected>Escolha o curso<\/option>\r\n                <\/select>\r\n\r\n                <select id=\"filtro-palestrante\">\r\n                    <option value=\"\" disabled selected>Escolha o palestrante<\/option>\r\n                <\/select>\r\n            <\/div>\r\n\r\n            <!-- Conte\u00fado das palestras -->\r\n            <div class=\"programacao-content\">\r\n                <div id=\"lista-cursos\">\r\n                    <p id=\"prog-status\">Carregando palestras...<\/p>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <script>\r\n            \/\/ Categorias definidas no admin (id, nome)\r\n            const categoriasDisponiveis = [\n    {\n        \"id\": 569,\n        \"nome\": \"Cursos T\u00e9cnicos FBEXPO 26\"\n    },\n    {\n        \"id\": 562,\n        \"nome\": \"Fitness Brasil Expo 2026\"\n    },\n    {\n        \"id\": 568,\n        \"nome\": \"Gest\u00e3o e Neg\u00f3cios FBE2026\"\n    },\n    {\n        \"id\": 582,\n        \"nome\": \"Ingresso FB EXPO 2026\"\n    },\n    {\n        \"id\": 567,\n        \"nome\": \"Ingressos Feira FBE2026\"\n    },\n    {\n        \"id\": 566,\n        \"nome\": \"O Melhor Coordenador T\u00e9cnico de Academias do Mundo - FB EXPO 26\"\n    },\n    {\n        \"id\": 563,\n        \"nome\": \"Passaporte T\u00e9cnico FB EXPO 26\"\n    },\n    {\n        \"id\": 564,\n        \"nome\": \"Passaporte VIP Fitbr 2026\"\n    }\n];\r\n            console.log(\"Categorias dispon\u00edveis:\", categoriasDisponiveis);\r\n            const allowedCatIds = new Set(\r\n              (categoriasDisponiveis || [])\r\n                .map(c => parseInt(c?.id ?? c?.term_id, 10))\r\n                .filter(n => Number.isInteger(n) && n > 0)\r\n            );\r\n\r\n            let cursosPorCategoria = {};\r\n            let PALESTRAS_RAW = [];\r\n\r\n            function showInfo(msg) {\r\n                const cont = document.querySelector('#lista-cursos');\r\n                cont.innerHTML = `<p class=\"prog-msg\">${msg}<\/p>`;\r\n            }\r\n\r\n            document.addEventListener(\"DOMContentLoaded\", function() {\r\n                fetch(\"https:\/\/www.fitnessbrasil.com.br\/wp-admin\/admin-ajax.php?action=carregar_palestras\", { credentials: 'same-origin' })\r\n                    .then(response => {\r\n                        if (!response.ok) {\r\n                            throw new Error('Falha na requisi\u00e7\u00e3o (' + response.status + ')');\r\n                        }\r\n                        return response.json();\r\n                    })\r\n                    .then(payload => {\r\n                        const data = payload?.data || {};\r\n                        const palestras = data?.palestras || [];\r\n                        const palestrantes = data?.palestrantes || [];\r\n                        const cursosNomes = data?.cursos || [];\r\n                        const message = data?.message || '';\r\n\r\n                        \/\/ Se vier mensagem do backend e n\u00e3o h\u00e1 itens, mostra\r\n                        if (!palestras.length) {\r\n                            showInfo(message || 'Nenhuma palestra encontrada.');\r\n                            return;\r\n                        }\r\n\r\n                        \/\/ Se admin n\u00e3o marcou categorias, derive a lista e allowedCatIds\r\n                        if (!categoriasDisponiveis || !categoriasDisponiveis.length) {\r\n                            const cats = new Map();\r\n                            palestras.forEach(p =>\r\n                                (p.cursos || []).forEach(c => {\r\n                                    if (c.categoria_id && c.categoria) cats.set(parseInt(c.categoria_id,10), c.categoria);\r\n                                })\r\n                            );\r\n                            window.categoriasDisponiveis = Array.from(cats, ([id, nome]) => ({ id, nome }));\r\n                            allowedCatIds.clear();\r\n                            window.categoriasDisponiveis.forEach(c => {\r\n                                const id = parseInt(c.id,10);\r\n                                if (Number.isInteger(id) && id>0) allowedCatIds.add(id);\r\n                            });\r\n                        }\r\n\r\n                        \/\/ Blindagem extra no front (se houver categorias permitidas)\r\n                        let filtradas = palestras;\r\n                        if (allowedCatIds.size) {\r\n                            filtradas = palestras\r\n                                .map(p => {\r\n                                    const cursosFiltrados = (p.cursos || []).filter(c =>\r\n                                        allowedCatIds.has(parseInt(c.categoria_id, 10))\r\n                                    );\r\n                                    return { ...p, cursos: cursosFiltrados };\r\n                                })\r\n                                .filter(p => p.cursos && p.cursos.length);\r\n                        }\r\n\r\n                        if (!filtradas.length) {\r\n                            showInfo('Nenhuma palestra encontrada nas categorias selecionadas.');\r\n                            return;\r\n                        }\r\n\r\n                        PALESTRAS_RAW = filtradas;\r\n\r\n                        popularFiltros(PALESTRAS_RAW, palestrantes, cursosNomes);\r\n                        configurarFiltros(PALESTRAS_RAW);\r\n                        carregarMenorData(PALESTRAS_RAW);\r\n                    })\r\n                    .catch(err => {\r\n                        console.error(\"Erro ao buscar palestras:\", err);\r\n                        showInfo('Erro ao carregar a programa\u00e7\u00e3o. Tente novamente em instantes.');\r\n                    });\r\n            });\r\n\r\n            function popularFiltros(palestras, palestrantesOrdenados, cursosNomes) {\r\n                const dias = new Set();\r\n                palestras.forEach(p => { if (p.dia) dias.add(p.dia); });\r\n                preencherSelect(\"#filtro-dia\", Array.from(dias).sort());\r\n\r\n                preencherSelect(\"#filtro-categoria\",\r\n                    (categoriasDisponiveis || [])\r\n                        .map(cat => (cat && (cat.nome || cat.name)) ? (cat.nome || cat.name) : null)\r\n                        .filter(Boolean)\r\n                );\r\n\r\n                cursosPorCategoria = {};\r\n                palestras.forEach(p => {\r\n                    (p.cursos || []).forEach(curso => {\r\n                        const catId = parseInt(curso.categoria_id, 10);\r\n                        if (!allowedCatIds.size || allowedCatIds.has(catId)) {\r\n                            if (!cursosPorCategoria[catId]) cursosPorCategoria[catId] = new Set();\r\n                            cursosPorCategoria[catId].add(curso.nome);\r\n                        }\r\n                    });\r\n                });\r\n\r\n                \/\/ come\u00e7a vazio; ser\u00e1 populado ao escolher categoria\r\n                preencherSelect(\"#filtro-curso\", []);\r\n\r\n                preencherSelect(\"#filtro-palestrante\", palestrantesOrdenados || []);\r\n            }\r\n\r\n            function preencherSelect(id, valores) {\r\n                const select = document.querySelector(id);\r\n                select.innerHTML = \"\";\r\n\r\n                const placeholder = document.createElement(\"option\");\r\n                placeholder.value = \"\";\r\n                placeholder.disabled = false;\r\n                placeholder.selected = true;\r\n\r\n                if (id === \"#filtro-categoria\") placeholder.textContent = \"Todas as categorias\";\r\n                else if (id === \"#filtro-dia\") placeholder.textContent = \"Todos os dias\";\r\n                else if (id === \"#filtro-curso\") placeholder.textContent = \"Todos os cursos\";\r\n                else if (id === \"#filtro-palestrante\") placeholder.textContent = \"Todos os palestrantes\";\r\n                else placeholder.textContent = \"Todos\";\r\n\r\n                select.appendChild(placeholder);\r\n\r\n                (valores || []).forEach(valor => {\r\n                    const option = document.createElement(\"option\");\r\n                    if (typeof valor === \"object\" && valor !== null) {\r\n                        const nome = valor?.nome ?? valor?.name ?? '';\r\n                        option.value = nome;\r\n                        option.textContent = nome;\r\n                    } else {\r\n                        option.value = valor;\r\n                        option.textContent = valor;\r\n                    }\r\n                    if (option.value) select.appendChild(option);\r\n                });\r\n            }\r\n\r\n            function configurarFiltros(palestras) {\r\n                document.querySelectorAll(\"#filtro-dia, #filtro-curso, #filtro-palestrante\").forEach(select => {\r\n                    select.addEventListener(\"change\", function() {\r\n                        filtrarPalestras(palestras);\r\n                    });\r\n                });\r\n\r\n                document.querySelector(\"#filtro-categoria\").addEventListener(\"change\", function() {\r\n                    const categoriaSelecionada = (categoriasDisponiveis || []).find(cat => {\r\n                        const nome = cat?.nome ?? cat?.name;\r\n                        return nome === this.value;\r\n                    });\r\n                    const catId = categoriaSelecionada ? parseInt(categoriaSelecionada.id, 10) : null;\r\n\r\n                    const cursosFiltrados = (catId && cursosPorCategoria[catId])\r\n                        ? Array.from(cursosPorCategoria[catId])\r\n                        : [];\r\n\r\n                    preencherSelect(\"#filtro-curso\", cursosFiltrados);\r\n                    filtrarPalestras(palestras);\r\n                });\r\n            }\r\n\r\n            function filtrarPalestras(palestras) {\r\n                const diaSelecionado           = document.querySelector(\"#filtro-dia\").value;\r\n                const cursoSelecionado         = document.querySelector(\"#filtro-curso\").value;\r\n                const palestranteSelecionado   = document.querySelector(\"#filtro-palestrante\").value;\r\n                const categoriaSelecionadaNome = document.querySelector(\"#filtro-categoria\").value;\r\n\r\n                const categoriaSelecionada = (categoriasDisponiveis || []).find(cat => {\r\n                    const nome = cat?.nome ?? cat?.name;\r\n                    return nome === categoriaSelecionadaNome;\r\n                });\r\n                const categoriaSelecionadaId = categoriaSelecionada ? parseInt(categoriaSelecionada.id, 10) : null;\r\n\r\n                const palestrasFiltradas = palestras.filter(p => {\r\n                    if (!p.cursos || !p.cursos.length) return false;\r\n\r\n                    const cursosValidos = p.cursos.filter(c =>\r\n                        (!allowedCatIds.size || allowedCatIds.has(parseInt(c.categoria_id, 10)))\r\n                    );\r\n                    if (!cursosValidos.length) return false;\r\n\r\n                    const matchDia         = (diaSelecionado === \"\" || p.dia === diaSelecionado);\r\n                    const matchCurso       = (cursoSelecionado === \"\" || cursosValidos.some(c => c.nome === cursoSelecionado));\r\n                    const matchPalestrante = (palestranteSelecionado === \"\" || (p.palestrantes || []).some(pal => pal.nome === palestranteSelecionado));\r\n                    const matchCategoria   = (!categoriaSelecionadaId || cursosValidos.some(c => parseInt(c.categoria_id,10) === categoriaSelecionadaId));\r\n\r\n                    return matchDia && matchCurso && matchPalestrante && matchCategoria;\r\n                });\r\n\r\n                exibirPalestrasPorDia(palestrasFiltradas);\r\n            }\r\n\r\n            function exibirPalestrasPorDia(palestras) {\r\n                const container = document.querySelector(\"#lista-cursos\");\r\n                container.innerHTML = \"\";\r\n\r\n                if (!palestras.length) {\r\n                    container.innerHTML = \"<p class='prog-msg'>Nenhuma palestra encontrada com os filtros selecionados.<\/p>\";\r\n                    return;\r\n                }\r\n\r\n                const diasMap = {};\r\n                palestras.forEach(palestra => {\r\n                    if (!diasMap[palestra.dia]) diasMap[palestra.dia] = {};\r\n                    (palestra.cursos || []).forEach(curso => {\r\n                        const cursoId = curso.id;\r\n                        if (!diasMap[palestra.dia][cursoId]) {\r\n                            diasMap[palestra.dia][cursoId] = {\r\n                                nome: curso.nome,\r\n                                cor: curso.cor,\r\n                                categoria: curso.categoria,\r\n                                palestras: []\r\n                            };\r\n                        }\r\n                        diasMap[palestra.dia][cursoId].palestras.push(palestra);\r\n                    });\r\n                });\r\n\r\n                const diasOrdenados = Object.keys(diasMap).sort((a, b) => {\r\n                    const toISO = (s) => s.split('\/').reverse().join('-'); \/\/ dd\/mm\/yyyy -> yyyy-mm-dd\r\n                    return new Date(toISO(a)) - new Date(toISO(b));\r\n                });\r\n\r\n                diasOrdenados.forEach(dia => {\r\n                    const diaDiv = document.createElement(\"div\");\r\n                    diaDiv.classList.add(\"dia-section\");\r\n                    diaDiv.innerHTML = `<h2 data-dia=\"${dia}\">${dia}<\/h2>`;\r\n\r\n                    for (const cursoId in diasMap[dia]) {\r\n                        const cursoData = diasMap[dia][cursoId];\r\n\r\n                        const cursoDiv = document.createElement(\"div\");\r\n                        cursoDiv.classList.add(\"curso-section\");\r\n                        cursoDiv.style.border = `1px solid ${cursoData.cor}`;\r\n\r\n                        cursoDiv.innerHTML = `\r\n                            <div class=\"curso-header\" style=\"background:${cursoData.cor};\">\r\n                                <div class=\"curso-info\">\r\n                                    <h3 data-curso-id=\"${cursoId}\">${cursoData.nome}<\/h3>\r\n                                    <small class=\"curso-categoria\">${cursoData.categoria}<\/small>\r\n                                <\/div>\r\n                                <div class=\"curso-btn\">\r\n                                    <a href=\"https:\/\/eventos.tmp.br\/fitness2025\/visitantes\/inicio_grupo.php\"\r\n                                       style=\"background:#FFF; color:${cursoData.cor};\"\r\n                                       class=\"btn-comprar\" target=\"_blank\">COMPRAR AGORA<\/a>\r\n                                <\/div>\r\n                            <\/div>\r\n                        `;\r\n\r\n                        const palestraGrid = document.createElement(\"div\");\r\n                        palestraGrid.classList.add(\"palestra-grid\");\r\n\r\n                        (cursoData.palestras || []).forEach(palestra => {\r\n                            const palestraDiv = document.createElement(\"div\");\r\n                            palestraDiv.classList.add(\"palestra-card\");\r\n\r\n                            palestraDiv.innerHTML = `\r\n                                <h4>${palestra.titulo}<\/h4>\r\n                                <p>${palestra.dia} - ${palestra.hora_inicio}${palestra.hora_fim ? ` \u00e0s ${palestra.hora_fim}` : ''}<\/p>\r\n                                ${(palestra.palestrantes || []).map(p => `\r\n                                    <div class=\"palestrante\">\r\n                                        <div class=\"palestrante-foto\">\r\n                                            <img decoding=\"async\" src=\"${p.foto}\" alt=\"${p.nome}\">\r\n                                        <\/div>\r\n                                        <div class=\"palestrante-info\">\r\n                                            <p><strong>${p.nome}<\/strong><\/p>\r\n                                            <p>${p.cargo}<\/p>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                `).join('')}\r\n                            `;\r\n                            palestraGrid.appendChild(palestraDiv);\r\n                        });\r\n\r\n                        cursoDiv.appendChild(palestraGrid);\r\n                        diaDiv.appendChild(cursoDiv);\r\n                    }\r\n\r\n                    container.appendChild(diaDiv);\r\n                });\r\n            }\r\n\r\n            function carregarMenorData(palestras) {\r\n                const dias = new Set(palestras.map(p => p.dia).filter(Boolean));\r\n                const ordenado = Array.from(dias).sort();\r\n                if (ordenado.length) {\r\n                    document.querySelector(\"#filtro-dia\").value = ordenado[0];\r\n                    filtrarPalestras(palestras);\r\n                } else {\r\n                    showInfo('Nenhuma palestra encontrada.');\r\n                }\r\n            }\r\n        <\/script>\r\n        \n\n\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\n\n<\/div>\n\n\t\t<\/div>\n\n\t\t\n<style>\n#section_1834415290 {\n  padding-top: 100px;\n  padding-bottom: 100px;\n  background-color: rgb(255,255,255);\n}\n<\/style>\n\t<\/section>\n\t\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":13726,"featured_media":0,"parent":129242,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-blank.php","meta":{"_acf_changed":false,"footnotes":""},"folder":[565],"class_list":["post-129281","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Programa\u00e7\u00e3o - Fitness Brasil<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.fitnessbrasil.com.br\/es\/fitness-brasil-expo-2026\/programacao\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Programa\u00e7\u00e3o - Fitness Brasil\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.fitnessbrasil.com.br\/es\/fitness-brasil-expo-2026\/programacao\/\" \/>\n<meta property=\"og:site_name\" content=\"Fitness Brasil\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-07T23:47:14+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/programacao\/\",\"url\":\"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/programacao\/\",\"name\":\"Programa\u00e7\u00e3o - Fitness Brasil\",\"isPartOf\":{\"@id\":\"https:\/\/www.fitnessbrasil.com.br\/#website\"},\"datePublished\":\"2025-10-07T23:16:19+00:00\",\"dateModified\":\"2025-10-07T23:47:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/programacao\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/programacao\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/programacao\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/www.fitnessbrasil.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fitness Brasil Expo 2026\",\"item\":\"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Programa\u00e7\u00e3o\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.fitnessbrasil.com.br\/#website\",\"url\":\"https:\/\/www.fitnessbrasil.com.br\/\",\"name\":\"Fitness Brasil\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.fitnessbrasil.com.br\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.fitnessbrasil.com.br\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.fitnessbrasil.com.br\/#organization\",\"name\":\"Fitness Brasil\",\"url\":\"https:\/\/www.fitnessbrasil.com.br\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.fitnessbrasil.com.br\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.fitnessbrasil.com.br\/wp-content\/uploads\/2022\/01\/Logo-Fitness-Brasil_preto-e-cor.png\",\"contentUrl\":\"https:\/\/www.fitnessbrasil.com.br\/wp-content\/uploads\/2022\/01\/Logo-Fitness-Brasil_preto-e-cor.png\",\"width\":593,\"height\":316,\"caption\":\"Fitness Brasil\"},\"image\":{\"@id\":\"https:\/\/www.fitnessbrasil.com.br\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Programa\u00e7\u00e3o - Fitness Brasil","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.fitnessbrasil.com.br\/es\/fitness-brasil-expo-2026\/programacao\/","og_locale":"es_ES","og_type":"article","og_title":"Programa\u00e7\u00e3o - Fitness Brasil","og_url":"https:\/\/www.fitnessbrasil.com.br\/es\/fitness-brasil-expo-2026\/programacao\/","og_site_name":"Fitness Brasil","article_modified_time":"2025-10-07T23:47:14+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/programacao\/","url":"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/programacao\/","name":"Programa\u00e7\u00e3o - Fitness Brasil","isPartOf":{"@id":"https:\/\/www.fitnessbrasil.com.br\/#website"},"datePublished":"2025-10-07T23:16:19+00:00","dateModified":"2025-10-07T23:47:14+00:00","breadcrumb":{"@id":"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/programacao\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/programacao\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/programacao\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.fitnessbrasil.com.br\/"},{"@type":"ListItem","position":2,"name":"Fitness Brasil Expo 2026","item":"https:\/\/www.fitnessbrasil.com.br\/fitness-brasil-expo-2026\/"},{"@type":"ListItem","position":3,"name":"Programa\u00e7\u00e3o"}]},{"@type":"WebSite","@id":"https:\/\/www.fitnessbrasil.com.br\/#website","url":"https:\/\/www.fitnessbrasil.com.br\/","name":"Fitness Brasil","description":"","publisher":{"@id":"https:\/\/www.fitnessbrasil.com.br\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.fitnessbrasil.com.br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.fitnessbrasil.com.br\/#organization","name":"Fitness Brasil","url":"https:\/\/www.fitnessbrasil.com.br\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.fitnessbrasil.com.br\/#\/schema\/logo\/image\/","url":"https:\/\/www.fitnessbrasil.com.br\/wp-content\/uploads\/2022\/01\/Logo-Fitness-Brasil_preto-e-cor.png","contentUrl":"https:\/\/www.fitnessbrasil.com.br\/wp-content\/uploads\/2022\/01\/Logo-Fitness-Brasil_preto-e-cor.png","width":593,"height":316,"caption":"Fitness Brasil"},"image":{"@id":"https:\/\/www.fitnessbrasil.com.br\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.fitnessbrasil.com.br\/es\/wp-json\/wp\/v2\/pages\/129281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fitnessbrasil.com.br\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.fitnessbrasil.com.br\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.fitnessbrasil.com.br\/es\/wp-json\/wp\/v2\/users\/13726"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fitnessbrasil.com.br\/es\/wp-json\/wp\/v2\/comments?post=129281"}],"version-history":[{"count":0,"href":"https:\/\/www.fitnessbrasil.com.br\/es\/wp-json\/wp\/v2\/pages\/129281\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.fitnessbrasil.com.br\/es\/wp-json\/wp\/v2\/pages\/129242"}],"wp:attachment":[{"href":"https:\/\/www.fitnessbrasil.com.br\/es\/wp-json\/wp\/v2\/media?parent=129281"}],"wp:term":[{"taxonomy":"folder","embeddable":true,"href":"https:\/\/www.fitnessbrasil.com.br\/es\/wp-json\/wp\/v2\/folder?post=129281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}