{"id":44,"date":"2026-09-25T15:25:42","date_gmt":"2026-09-25T15:25:42","guid":{"rendered":"https:\/\/skyros-congressos.pt\/2026\/AneuriBraga\/?page_id=44"},"modified":"2026-10-08T11:05:16","modified_gmt":"2026-10-08T11:05:16","slug":"programa","status":"publish","type":"page","link":"https:\/\/skyros-congressos.pt\/2026\/AneuriBraga\/programa\/","title":{"rendered":"Programa"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"44\" class=\"elementor elementor-44\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6d9104b e-flex e-con-boxed e-con e-parent\" data-id=\"6d9104b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7d67e0a elementor-widget elementor-widget-html\" data-id=\"7d67e0a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- Contentor do Programa -->\r\n<div id=\"skyros-program-app\">\r\n    <div id=\"program-loading\" class=\"skyros-loading\">\r\n        <div class=\"skyros-spinner\"><\/div>\r\n        <p>A carregar o programa...<\/p>\r\n    <\/div>\r\n    <div id=\"program-content\" style=\"display: none;\">\r\n        \r\n        <!-- Abas dos Dias -->\r\n        <div id=\"program-days-tabs\" class=\"skyros-tabs\"><\/div>\r\n        \r\n        <!-- Lista de Sess\u00f5es do Dia Selecionado -->\r\n        <div id=\"program-sessions-list\" class=\"skyros-sessions\"><\/div>\r\n    <\/div>\r\n    <div id=\"program-error\" class=\"skyros-error\" style=\"display: none;\">\r\n        N\u00e3o foi poss\u00edvel carregar o programa de momento.\r\n    <\/div>\r\n<\/div>\r\n\r\n<!-- Estilos CSS -->\r\n<style>\r\n    #skyros-program-app {\r\n        font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\r\n        max-width: 1000px;\r\n        margin: 0 auto;\r\n        color: #333;\r\n    }\r\n    .skyros-loading, .skyros-error {\r\n        text-align: center;\r\n        padding: 40px;\r\n        font-size: 16px;\r\n    }\r\n    .skyros-spinner {\r\n        border: 4px solid #f3f3f3;\r\n        border-top: 4px solid #0073aa;\r\n        border-radius: 50%;\r\n        width: 36px;\r\n        height: 36px;\r\n        animation: skyros-spin 1s linear infinite;\r\n        margin: 0 auto 15px;\r\n    }\r\n    @keyframes skyros-spin {\r\n        0% { transform: rotate(0deg); }\r\n        100% { transform: rotate(360deg); }\r\n    }\r\n    .skyros-title {\r\n        text-align: center;\r\n        margin-bottom: 25px;\r\n        font-weight: 700;\r\n    }\r\n    .skyros-tabs {\r\n        display: flex;\r\n        gap: 10px;\r\n        border-bottom: 2px solid #eaeaea;\r\n        margin-bottom: 25px;\r\n        overflow-x: auto;\r\n    }\r\n    .skyros-tab-btn {\r\n        background: none;\r\n        border: none;\r\n        padding: 12px 20px;\r\n        font-size: 15px;\r\n        font-weight: 600;\r\n        cursor: pointer;\r\n        border-bottom: 3px solid transparent;\r\n        color: #666;\r\n        transition: all 0.2s ease;\r\n    }\r\n    .skyros-tab-btn.active {\r\n        color: #0073aa;\r\n        border-bottom-color: #0073aa;\r\n    }\r\n    .skyros-session-card {\r\n        background: #fff;\r\n        border: 1px solid #e2e8f0;\r\n        border-left: 4px solid #0073aa;\r\n        border-radius: 6px;\r\n        padding: 18px 20px;\r\n        margin-bottom: 15px;\r\n        box-shadow: 0 2px 4px rgba(0,0,0,0.02);\r\n    }\r\n    .skyros-session-card.break-session {\r\n        border-left-color: #a0aec0;\r\n        background: #f7fafc;\r\n    }\r\n    .skyros-session-header {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        align-items: center;\r\n        gap: 12px;\r\n        margin-bottom: 8px;\r\n    }\r\n    .skyros-time {\r\n        font-weight: 700;\r\n        color: #2b6cb0;\r\n        background: #ebf8ff;\r\n        padding: 4px 10px;\r\n        border-radius: 4px;\r\n        font-size: 13px;\r\n    }\r\n    .skyros-room {\r\n        background: #feebc8;\r\n        color: #744210;\r\n        padding: 4px 10px;\r\n        border-radius: 4px;\r\n        font-size: 12px;\r\n        font-weight: 600;\r\n    }\r\n    .skyros-session-title {\r\n        margin: 5px 0 10px 0;\r\n        font-size: 18px;\r\n        color: #1a202c;\r\n    }\r\n    .skyros-people-group {\r\n        margin-top: 8px;\r\n        font-size: 14px;\r\n        line-height: 1.5;\r\n    }\r\n    .skyros-badge-label {\r\n        font-size: 11px;\r\n        font-weight: 700;\r\n        text-transform: uppercase;\r\n        padding: 2px 6px;\r\n        border-radius: 3px;\r\n        margin-right: 5px;\r\n    }\r\n    .badge-speaker { background: #e2e8f0; color: #2d3748; }\r\n    .badge-moderator { background: #e6fffa; color: #234e52; }\r\n    \r\n    .skyros-subsessions {\r\n        margin-top: 15px;\r\n        padding-left: 15px;\r\n        border-left: 3px solid #cbd5e0;\r\n    }\r\n    .skyros-subsession-item {\r\n        margin-top: 12px;\r\n        padding-bottom: 10px;\r\n        border-bottom: 1px dashed #e2e8f0;\r\n    }\r\n    .skyros-subsession-item:last-child {\r\n        border-bottom: none;\r\n        padding-bottom: 0;\r\n    }\r\n    .skyros-subsession-header {\r\n        font-size: 15px;\r\n        color: #2d3748;\r\n    }\r\n<\/style>\r\n\r\n<!-- Script de Integra\u00e7\u00e3o API -->\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n    const apiUrl = 'https:\/\/events.skyros-congressos.pt\/api\/programa\/ANEURIBRAGA';\r\n    let programData = null;\r\n    let selectedDayIdx = 0;\r\n    let currentLang = 'pt';\r\n\r\n    function getTrans(field, lang) {\r\n        lang = lang || currentLang;\r\n        if (typeof field === 'object' && field !== null) {\r\n            return field[lang] || field['pt'] || field[Object.keys(field)[0]] || '';\r\n        }\r\n        return (typeof field === 'string') ? field.trim() : (field || '');\r\n    }\r\n\r\n    function renderProgram() {\r\n        const schedule = programData.schedule || [];\r\n        \/\/const tabsContainer = document.getElementById('program-days-tabs');\r\n        \/\/tabsContainer.innerHTML = '';\r\n\r\n        if (schedule.length === 0) {\r\n            document.getElementById('program-sessions-list').innerHTML = '<p>Nenhum dia programado.<\/p>';\r\n            return;\r\n        }\r\n\r\n        \/\/ Renderizar abas de dias\r\n        schedule.forEach((day, idx) => {\r\n            const btn = document.createElement('button');\r\n            btn.className = `skyros-tab-btn ${idx === selectedDayIdx ? 'active' : ''}`;\r\n            btn.innerText = day.date ? `Dia ${idx + 1} (${day.date})` : `Dia ${idx + 1}`;\r\n            btn.onclick = function() {\r\n                selectedDayIdx = idx;\r\n                renderProgram();\r\n            };\r\n            \/\/tabsContainer.appendChild(btn);\r\n        });\r\n\r\n        \/\/ Renderizar sess\u00f5es do dia selecionado\r\n        renderSessions(schedule[selectedDayIdx]);\r\n    }\r\n\r\n    function renderSessions(dayData) {\r\n        const listContainer = document.getElementById('program-sessions-list');\r\n        listContainer.innerHTML = '';\r\n\r\n        if (!dayData || !dayData.sessions || dayData.sessions.length === 0) {\r\n            listContainer.innerHTML = '<p>Sem sess\u00f5es agendadas para este dia.<\/p>';\r\n            return;\r\n        }\r\n\r\n        dayData.sessions.forEach(session => {\r\n            const isFullSession = (Number(session.hasDetails) !== 0);\r\n            const sessionTitle = getTrans(session.title);\r\n            const roomText = getTrans(session.room || session.location);\r\n\r\n            const card = document.createElement('div');\r\n            card.className = `skyros-session-card ${!isFullSession ? 'break-session' : ''}`;\r\n\r\n            let html = `\r\n                <div class=\"skyros-session-header\">\r\n                    <span class=\"skyros-time\">${session.startTime || ''} ${session.endTime ? '- ' + session.endTime : ''}<\/span>\r\n                    ${roomText ? `<span class=\"skyros-room\">${roomText}<\/span>` : ''}\r\n                <\/div>\r\n                <h3 class=\"skyros-session-title\">${sessionTitle}<\/h3>\r\n            `;\r\n\r\n            if (isFullSession) {\r\n                \/\/ Moderadores da Sess\u00e3o Principal\r\n                if (session.moderators && session.moderators.length > 0) {\r\n                    const mods = session.moderators.map(m => m.name).join(', ');\r\n                    html += `<div class=\"skyros-people-group\"><span class=\"skyros-badge-label badge-moderator\">Modera\u00e7\u00e3o<\/span> ${mods}<\/div>`;\r\n                }\r\n\r\n                \/\/ Speakers da Sess\u00e3o Principal\r\n                if (session.speakers && session.speakers.length > 0) {\r\n                    const spks = session.speakers.map(s => {\r\n                        const inst = getTrans(s.institution);\r\n                        return `<strong>${s.name}<\/strong>${inst ? ` <small>(${inst})<\/small>` : ''}`;\r\n                    }).join(', ');\r\n                    html += `<div class=\"skyros-people-group\">${spks}<\/div>`;\r\n                }\r\n\r\n                \/\/ Sub-sess\u00f5es\r\n                if (session.subSessions && session.subSessions.length > 0) {\r\n                    html += `<div class=\"skyros-subsessions\">`;\r\n                    session.subSessions.forEach(sub => {\r\n                        const subTitle = getTrans(sub.title);\r\n                        html += `\r\n                            <div class=\"skyros-subsession-item\">\r\n                                <div class=\"skyros-subsession-header\">\r\n                                    ${sub.startTime ? `<strong>${sub.startTime}${sub.endTime ? ' - ' + sub.endTime : ''}<\/strong>: ` : ''}${subTitle}\r\n                                <\/div>`;\r\n\r\n                        \/\/ Moderadores da Sub-sess\u00e3o\r\n                        if (sub.moderators && sub.moderators.length > 0) {\r\n                            const subMods = sub.moderators.map(m => m.name).join(', ');\r\n                            html += `<div class=\"skyros-people-group\"><span class=\"skyros-badge-label badge-moderator\">Modera\u00e7\u00e3o<\/span> ${subMods}<\/div>`;\r\n                        }\r\n\r\n                        \/\/ Speakers da Sub-sess\u00e3o\r\n                        if (sub.speakers && sub.speakers.length > 0) {\r\n                            const subSpks = sub.speakers.map(s => {\r\n                                const inst = getTrans(s.institution);\r\n                                return `<strong>${s.name}<\/strong>${inst ? ` <small>(${inst})<\/small>` : ''}`;\r\n                            }).join(', ');\r\n                            html += `<div class=\"skyros-people-group\">${subSpks}<\/div>`;\r\n                        }\r\n\r\n                        html += `<\/div>`;\r\n                    });\r\n                    html += `<\/div>`;\r\n                }\r\n            }\r\n\r\n            card.innerHTML = html;\r\n            listContainer.appendChild(card);\r\n        });\r\n    }\r\n\r\n    \/\/ Fetch dos dados da API\r\n    fetch(apiUrl)\r\n        .then(response => {\r\n            if (!response.ok) throw new Error('Erro na resposta da API');\r\n            return response.json();\r\n        })\r\n        .then(data => {\r\n            programData = data.json || data.program || data;\r\n            document.getElementById('program-loading').style.display = 'none';\r\n            document.getElementById('program-content').style.display = 'block';\r\n            renderProgram();\r\n        })\r\n        .catch(err => {\r\n            console.error(err);\r\n            document.getElementById('program-loading').style.display = 'none';\r\n            document.getElementById('program-error').style.display = 'block';\r\n        });\r\n});\r\n<\/script>\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>A carregar o programa&#8230; N\u00e3o foi poss\u00edvel carregar o programa de momento.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"postBodyCss":"","postBodyMargin":[],"postBodyPadding":[],"postBodyBackground":{"backgroundType":"classic","gradient":""},"footnotes":""},"class_list":["post-44","page","type-page","status-publish","hentry"],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/skyros-congressos.pt\/2026\/AneuriBraga\/wp-json\/wp\/v2\/pages\/44","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/skyros-congressos.pt\/2026\/AneuriBraga\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/skyros-congressos.pt\/2026\/AneuriBraga\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/skyros-congressos.pt\/2026\/AneuriBraga\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/skyros-congressos.pt\/2026\/AneuriBraga\/wp-json\/wp\/v2\/comments?post=44"}],"version-history":[{"count":25,"href":"https:\/\/skyros-congressos.pt\/2026\/AneuriBraga\/wp-json\/wp\/v2\/pages\/44\/revisions"}],"predecessor-version":[{"id":371,"href":"https:\/\/skyros-congressos.pt\/2026\/AneuriBraga\/wp-json\/wp\/v2\/pages\/44\/revisions\/371"}],"wp:attachment":[{"href":"https:\/\/skyros-congressos.pt\/2026\/AneuriBraga\/wp-json\/wp\/v2\/media?parent=44"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}