{"id":92806,"date":"2026-10-14T08:58:22","date_gmt":"2026-10-14T07:58:22","guid":{"rendered":"https:\/\/staging.academiaclinicadragao.com\/?page_id=92806"},"modified":"2026-10-28T15:30:59","modified_gmt":"2026-10-28T15:30:59","slug":"portal-dos-formadores","status":"publish","type":"page","link":"https:\/\/staging.academiaclinicadragao.com\/en\/portal-dos-formadores\/","title":{"rendered":"Trainers' Portal"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"92806\" class=\"elementor elementor-92806\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6181f10 elementor-section-boxed elementor-section-height-default elementor-section-height-default wd-section-disabled\" data-id=\"6181f10\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[],&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-64926a9\" data-id=\"64926a9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-dbc56cc formador-page-title elementor-widget elementor-widget-wd_title\" data-id=\"dbc56cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"wd_title.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"title-wrapper set-mb-s reset-last-child wd-title-color-default wd-title-style-default wd-title-size-default text-left\">\n\n\t\t\t\n\t\t\t<div class=\"liner-continer\">\n\t\t\t\t<h4 class=\"woodmart-title-container title wd-fontsize-l\">Portal do Formador<\/h4> \n\t\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-41478f2 elementor-widget elementor-widget-html\" data-id=\"41478f2\" 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<!-- =========================================\r\n     TRAINER PORTAL - FULL PAGE LOADER (PT \/ EN)\r\n========================================= -->\r\n\r\n<div id=\"trainer-page-loader\"\r\n     role=\"status\"\r\n     aria-live=\"polite\"\r\n     data-no-translation\r\n     translate=\"no\">\r\n\r\n    <div class=\"trainer-loader-content\">\r\n\r\n        <div class=\"trainer-loader-spinner\"><\/div>\r\n\r\n        <h2><span class=\"trainer-loader-lang-pt\">Portal dos Formadores<\/span><span class=\"trainer-loader-lang-en\">Trainers Portal<\/span><\/h2>\r\n\r\n        <p><span class=\"trainer-loader-lang-pt\">A preparar a sua \u00e1rea pessoal...<\/span><span class=\"trainer-loader-lang-en\">Preparing your personal area...<\/span><\/p>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n\r\n<style>\r\n\r\n\/* Show English labels only on \/en\/ URLs; protect both from TranslatePress. *\/\r\n#trainer-page-loader .trainer-loader-lang-en { display: none !important; }\r\nhtml.trainer-loader-english #trainer-page-loader .trainer-loader-lang-pt { display: none !important; }\r\nhtml.trainer-loader-english #trainer-page-loader .trainer-loader-lang-en { display: inline !important; }\r\n\r\n\/* =========================================\r\n   FULL PAGE LOADER\r\n========================================= *\/\r\n\r\n#trainer-page-loader {\r\n    position: fixed !important;\r\n    inset: 0 !important;\r\n\r\n    width: 100vw !important;\r\n    height: 100vh !important;\r\n    height: 100dvh !important;\r\n\r\n    z-index: 999999 !important;\r\n\r\n    display: flex !important;\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    background: #f4f8ff !important;\r\n\r\n    opacity: 1;\r\n    visibility: visible;\r\n\r\n    transition:\r\n        opacity 0.35s ease,\r\n        visibility 0.35s ease;\r\n}\r\n\r\n\/* Hide loader when photograph is ready *\/\r\n\r\n#trainer-page-loader.trainer-loader-finished {\r\n    opacity: 0 !important;\r\n    visibility: hidden !important;\r\n    pointer-events: none !important;\r\n}\r\n\r\n\/* =========================================\r\n   LOADER CONTENT\r\n========================================= *\/\r\n\r\n#trainer-page-loader .trainer-loader-content {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n\r\n    gap: 15px;\r\n    padding: 30px;\r\n\r\n    text-align: center;\r\n}\r\n\r\n\/* =========================================\r\n   SPINNER\r\n========================================= *\/\r\n\r\n#trainer-page-loader .trainer-loader-spinner {\r\n    width: 55px;\r\n    height: 55px;\r\n\r\n    border: 5px solid #dbeafe;\r\n    border-top-color: #258cfa;\r\n\r\n    border-radius: 50%;\r\n\r\n    animation: trainerLoaderSpin 0.8s linear infinite;\r\n}\r\n\r\n\/* =========================================\r\n   TITLE\r\n========================================= *\/\r\n\r\n#trainer-page-loader h2 {\r\n    margin: 0 !important;\r\n\r\n    color: #1559e8 !important;\r\n    font-size: 25px !important;\r\n    font-weight: 700 !important;\r\n\r\n    text-transform: none !important;\r\n}\r\n\r\n\/* =========================================\r\n   DESCRIPTION\r\n========================================= *\/\r\n\r\n#trainer-page-loader p {\r\n    margin: 0 !important;\r\n\r\n    color: #2269f0 !important;\r\n    font-size: 15px !important;\r\n}\r\n\r\n\/* =========================================\r\n   ANIMATION\r\n========================================= *\/\r\n\r\n@keyframes trainerLoaderSpin {\r\n    to {\r\n        transform: rotate(360deg);\r\n    }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n    #trainer-page-loader .trainer-loader-spinner {\r\n        animation-duration: 2s;\r\n    }\r\n}\r\n\r\n<\/style>\r\n\r\n<script>\r\n\/* Choose the language immediately, independently of TranslatePress. *\/\r\n(function () {\r\n    document.documentElement.classList.toggle(\r\n        'trainer-loader-english',\r\n        \/^\\\/en(?:\\\/|$)\/i.test(window.location.pathname)\r\n    );\r\n})();\r\n<\/script>\r\n\r\n<script>\r\n(function () {\r\n\r\n    const MAX_WAIT = 15000;\r\n\r\n    let finished = false;\r\n    let observer = null;\r\n\r\n    \/\/ =====================================\r\n    \/\/ FINISH LOADING\r\n    \/\/ =====================================\r\n\r\n    function finishLoading() {\r\n\r\n        if (finished) return;\r\n\r\n        const loader = document.getElementById(\r\n            \"trainer-page-loader\"\r\n        );\r\n\r\n        if (!loader) return;\r\n\r\n        finished = true;\r\n\r\n        if (observer) {\r\n            observer.disconnect();\r\n        }\r\n\r\n        loader.classList.add(\r\n            \"trainer-loader-finished\"\r\n        );\r\n\r\n        \/\/ Remove loader after fade-out animation\r\n        setTimeout(function () {\r\n\r\n            loader.remove();\r\n\r\n        }, 400);\r\n    }\r\n\r\n    \/\/ =====================================\r\n    \/\/ CHECK TRAINER PHOTOGRAPH\r\n    \/\/ =====================================\r\n\r\n    function checkTrainerPhoto() {\r\n\r\n        if (finished) return;\r\n\r\n        \/\/ Trainer data retrieved from Dataverse\r\n        const trainerData = document.getElementById(\r\n            \"trainer-dataverse-data\"\r\n        );\r\n\r\n        \/\/ Wait until the DataPress shortcode is ready\r\n        if (!trainerData) return;\r\n\r\n        const expectedPhotoUrl =\r\n            trainerData.dataset.photo || \"\";\r\n\r\n        \/\/ Trainer has no photograph\r\n        if (!expectedPhotoUrl) {\r\n\r\n            finishLoading();\r\n            return;\r\n\r\n        }\r\n\r\n        \/\/ Elementor trainer photograph\r\n        const image = document.querySelector(\r\n            \".trainer-photo img\"\r\n        );\r\n\r\n        \/\/ Wait for Elementor to render the image\r\n        if (!image) return;\r\n\r\n        \/\/ Verify that the photograph is from Dataverse\r\n        \/\/ rather than Elementor's original image\r\n        const currentSrc =\r\n            image.getAttribute(\"src\") || \"\";\r\n\r\n        if (currentSrc !== expectedPhotoUrl) {\r\n            return;\r\n        }\r\n\r\n        \/\/ Image has finished loading successfully\r\n        if (\r\n            image.complete &&\r\n            image.naturalWidth > 0\r\n        ) {\r\n\r\n            finishLoading();\r\n\r\n        }\r\n\r\n    }\r\n\r\n    \/\/ =====================================\r\n    \/\/ INITIAL CHECK\r\n    \/\/ =====================================\r\n\r\n    checkTrainerPhoto();\r\n\r\n    \/\/ =====================================\r\n    \/\/ WATCH ELEMENTOR \/ DATAVERSE CHANGES\r\n    \/\/ =====================================\r\n\r\n    if (!finished) {\r\n\r\n        observer = new MutationObserver(function () {\r\n\r\n            checkTrainerPhoto();\r\n\r\n        });\r\n\r\n        observer.observe(document.documentElement, {\r\n\r\n            childList: true,\r\n            subtree: true,\r\n\r\n            attributes: true,\r\n\r\n            attributeFilter: [\r\n                \"src\",\r\n                \"srcset\",\r\n                \"data-photo\"\r\n            ]\r\n\r\n        });\r\n\r\n    }\r\n\r\n    \/\/ =====================================\r\n    \/\/ DETECT IMAGE LOAD\r\n    \/\/ =====================================\r\n\r\n    \/\/ Image load events require capture mode\r\n    document.addEventListener(\r\n        \"load\",\r\n        function (event) {\r\n\r\n            if (\r\n                event.target.matches &&\r\n                event.target.matches(\".trainer-photo img\")\r\n            ) {\r\n\r\n                checkTrainerPhoto();\r\n\r\n            }\r\n\r\n        },\r\n        true\r\n    );\r\n\r\n    \/\/ =====================================\r\n    \/\/ DOM READY\r\n    \/\/ =====================================\r\n\r\n    if (document.readyState === \"loading\") {\r\n\r\n        document.addEventListener(\r\n            \"DOMContentLoaded\",\r\n            checkTrainerPhoto,\r\n            { once: true }\r\n        );\r\n\r\n    }\r\n\r\n    \/\/ =====================================\r\n    \/\/ EMERGENCY FALLBACK\r\n    \/\/ =====================================\r\n\r\n    setTimeout(function () {\r\n\r\n        if (!finished) {\r\n\r\n            console.warn(\r\n                \"Trainer Portal: Photograph took too long to load.\"\r\n            );\r\n\r\n            finishLoading();\r\n\r\n        }\r\n\r\n    }, MAX_WAIT);\r\n\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-176b631 elementor-section-boxed elementor-section-height-default elementor-section-height-default wd-section-disabled\" data-id=\"176b631\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-811def6 detalhes-aluno\" data-id=\"811def6\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-deb28fb dados-aluno elementor-section-boxed elementor-section-height-default elementor-section-height-default wd-section-disabled\" data-id=\"deb28fb\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-2e89146\" data-id=\"2e89146\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b83510a elementor-widget__width-initial trainer-photo elementor-widget elementor-widget-image\" data-id=\"b83510a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/staging.academiaclinicadragao.com\/wp-content\/themes\/woodmart\/images\/lazy.png\" class=\"attachment-medium size-medium wp-image-71417 wd-lazy-load wd-lazy-fade\" alt=\"\" srcset=\"\" sizes=\"(max-width: 300px) 100vw, 300px\" data-wood-src=\"https:\/\/staging.academiaclinicadragao.com\/wp-content\/uploads\/2024\/06\/placeholder-21-300x200.png\" data-srcset=\"https:\/\/staging.academiaclinicadragao.com\/wp-content\/uploads\/2024\/06\/placeholder-21-300x200.png 300w, https:\/\/staging.academiaclinicadragao.com\/wp-content\/uploads\/2024\/06\/placeholder-21-1024x683.png 1024w, https:\/\/staging.academiaclinicadragao.com\/wp-content\/uploads\/2024\/06\/placeholder-21-768x512.png 768w, https:\/\/staging.academiaclinicadragao.com\/wp-content\/uploads\/2024\/06\/placeholder-21-18x12.png 18w, https:\/\/staging.academiaclinicadragao.com\/wp-content\/uploads\/2024\/06\/placeholder-21-600x400.png 600w, https:\/\/staging.academiaclinicadragao.com\/wp-content\/uploads\/2024\/06\/placeholder-21-150x100.png 150w, https:\/\/staging.academiaclinicadragao.com\/wp-content\/uploads\/2024\/06\/placeholder-21.png 1200w\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43ba68e trainer-number elementor-widget elementor-widget-wd_text_block\" data-id=\"43ba68e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"wd_text_block.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"wd-text-block reset-last-child text-center\">\n\t\t\t\n\t\t\t<p>N\u00ba formador: XXXXXX<span style=\"font-size: 18px; background-color: rgba(255, 255, 255, 0);\"><\/span><\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-2e2b5b4\" data-id=\"2e2b5b4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-75e67da trainer-greeting elementor-widget elementor-widget-wd_text_block\" data-id=\"75e67da\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"wd_text_block.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"wd-text-block reset-last-child text-left\">\n\t\t\t\n\t\t\t<h6>Ol\u00e1, Jo\u00e3o Silva<span style=\"font-size: 16px; background-color: rgba(255, 255, 255, 0); color: rgb(36, 36, 36);\"><\/span><\/h6>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-70f5083 elementor-widget elementor-widget-html\" data-id=\"70f5083\" 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<a href=\".\/perfil\" class=\"perfil-link\">\r\n    <span class=\"perfil-text\">O meu perfil<\/span>\r\n    <span class=\"perfil-arrow\">\r\n        <svg viewBox=\"0 0 24 24\"\r\n             width=\"20\" height=\"20\"\r\n             fill=\"none\" stroke=\"currentColor\"\r\n             stroke-width=\"2\"\r\n             aria-hidden=\"true\">\r\n            <path d=\"m9 5 7 7-7 7\"\/>\r\n        <\/svg>\r\n    <\/span>\r\n<\/a>\r\n\r\n<style>\r\n.perfil-link {\r\n    display: inline-flex !important;\r\n    width: fit-content !important;\r\n    align-items: center !important;\r\n    justify-content: flex-start !important;\r\n    gap: 8px !important;\r\n    color: #3978ff !important;\r\n    text-decoration: none !important;\r\n}\r\n\r\n.perfil-link .perfil-text {\r\n    display: inline-block !important;\r\n    color: inherit !important;\r\n    border-bottom: 1px solid currentColor !important;\r\n    font-size: 16px;\r\n    padding-bottom: 2px;\r\n    line-height: 0.5;\r\n}\r\n\r\n.perfil-link .perfil-arrow {\r\n    width: 28px;\r\n    height: 28px;\r\n    flex: 0 0 28px;\r\n    border: 2px solid currentColor;\r\n    border-radius: 50%;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n}\r\n\r\n.perfil-link:hover {\r\n    color: #0052c4 !important;\r\n}\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-221a647 elementor-widget elementor-widget-html\" data-id=\"221a647\" 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=\"portal-layout\" data-no-translation translate=\"no\">\r\n\r\n  <!-- LEFT COLUMN: BLUE BUTTONS -->\r\n  <div class=\"portal-buttons\">\r\n\r\n    <!-- OS MEUS CURSOS -->\r\n    <a href=\".\/os-meus-cursos\" class=\"portal-button\">\r\n      <span class=\"portal-button-icon\">\r\n        <i class=\"icon icon-graduation-hat\" aria-hidden=\"true\"><\/i>\r\n      <\/span>\r\n      <span class=\"portal-button-text\">\r\n        <span class=\"portal-btn-pt\">Os meus cursos<\/span><span class=\"portal-btn-en\">My courses<\/span>\r\n      <\/span>\r\n      <span class=\"portal-button-arrow\">\r\n        <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n          <path d=\"m9 5 7 7-7 7\"\/>\r\n        <\/svg>\r\n      <\/span>\r\n    <\/a>\r\n\r\n    <!-- HIST\u00d3RICO DE SESS\u00d5ES -->\r\n    <a href=\".\/historico-de-sessoes\" class=\"portal-button\">\r\n      <span class=\"portal-button-icon\">\r\n        <i class=\"icon icon-history\" aria-hidden=\"true\"><\/i>\r\n      <\/span>\r\n      <span class=\"portal-button-text\">\r\n        <span class=\"portal-btn-pt\">Hist\u00f3rico de sess\u00f5es<\/span><span class=\"portal-btn-en\">Session history<\/span>\r\n      <\/span>\r\n      <span class=\"portal-button-arrow\">\r\n        <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n          <path d=\"m9 5 7 7-7 7\"\/>\r\n        <\/svg>\r\n      <\/span>\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <!-- RIGHT COLUMN: FAQs -->\r\n  <div class=\"portal-faq\">\r\n    <a href=\".\/faqs\" class=\"portal-faq-link\" aria-label=\"FAQs\">\r\n      <svg class=\"portal-faq-icon\" viewBox=\"0 0 48 48\" width=\"48\" height=\"48\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n        <circle cx=\"24\" cy=\"24\" r=\"20\"\/>\r\n        <path d=\"M18 18a6 6 0 0 1 12 0c0 4-6 5-6 9\"\/>\r\n        <circle cx=\"24\" cy=\"34\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\"\/>\r\n      <\/svg>\r\n      <span>FAQs<\/span>\r\n    <\/a>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n\/* Local bilingual labels; never translate these manually selected strings. *\/\r\n.portal-layout .portal-btn-en { display: none !important; }\r\nhtml.formador-buttons-english .portal-layout .portal-btn-pt { display: none !important; }\r\nhtml.formador-buttons-english .portal-layout .portal-btn-en { display: inline !important; }\r\n\r\n\/* TWO-COLUMN LAYOUT *\/\r\n.portal-layout {\r\n    display: flex;\r\n    align-items: stretch;\r\n    justify-content: flex-start;\r\n    gap: 24px;\r\n    width: 100%;\r\n}\r\n\/* LEFT COLUMN - EXPAND TO FILL AVAILABLE SPACE *\/\r\n.portal-layout .portal-buttons {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n    gap: 12px;\r\n    flex: 1 1 0;\r\n    min-width: 0;\r\n}\r\n\/* BLUE BUTTONS *\/\r\n.portal-layout .portal-button {\r\n    display: flex !important;\r\n    align-items: center !important;\r\n    justify-content: flex-start !important;\r\n    gap: 12px !important;\r\n    width: 100%;\r\n    max-width: none;\r\n    min-height: 60px;\r\n    padding: 8px 12px;\r\n    background: #258CFA !important;\r\n    background-image: none !important;\r\n    border-radius: 10px;\r\n    border: none;\r\n    color: #ffffff !important;\r\n    text-decoration: none !important;\r\n    font-size: 13px;\r\n    font-weight: 600;\r\n    line-height: 1.4;\r\n    box-sizing: border-box;\r\n    transition: filter 0.2s ease;\r\n}\r\n\/* LEFT ICONS *\/\r\n.portal-layout .portal-button-icon {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    width: 30px;\r\n    flex: 0 0 30px;\r\n    color: #ffffff !important;\r\n}\r\n.portal-layout .portal-button-icon i {\r\n    font-size: 28px !important;\r\n    line-height: 1 !important;\r\n    color: #ffffff !important;\r\n}\r\n\/* BIGGER GRADUATION CAP *\/\r\n.portal-layout .portal-button:first-child .portal-button-icon i {\r\n    font-size: 36px !important;\r\n}\r\n\/* BUTTON TEXT *\/\r\n.portal-layout .portal-button-text {\r\n    flex: 1;\r\n    min-width: 0;\r\n    color: #ffffff !important;\r\n    text-align: left;\r\n}\r\n\/* CIRCULAR ARROWS *\/\r\n.portal-layout .portal-button-arrow {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    width: 28px;\r\n    height: 28px;\r\n    flex: 0 0 28px;\r\n    border: 2px solid #ffffff;\r\n    border-radius: 50%;\r\n    color: #ffffff !important;\r\n}\r\n.portal-layout .portal-button-arrow svg {\r\n    fill: none !important;\r\n    stroke: currentColor !important;\r\n}\r\n\/* BUTTON HOVER *\/\r\n.portal-layout .portal-button:hover {\r\n    background: #258CFA !important;\r\n    color: #ffffff !important;\r\n    filter: brightness(1.1);\r\n    text-decoration: none !important;\r\n}\r\n\/* RIGHT COLUMN: FAQs AT THE BOTTOM *\/\r\n.portal-layout .portal-faq {\r\n    display: flex;\r\n    flex: 0 0 70px;\r\n    align-items: flex-end;\r\n    justify-content: center;\r\n}\r\n\/* FAQs LINK *\/\r\n.portal-layout .portal-faq-link {\r\n    display: inline-flex !important;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 3px;\r\n    color: #1556C0 !important;\r\n    text-decoration: none !important;\r\n    font-size: 15px;\r\n    font-weight: 600;\r\n    line-height: 1.2;\r\n}\r\n\/* QUESTION MARK ICON *\/\r\n.portal-layout .portal-faq-icon {\r\n    width: 48px;\r\n    height: 48px;\r\n    color: #1556C0;\r\n    flex-shrink: 0;\r\n}\r\n\/* UNDERLINED FAQs TEXT *\/\r\n.portal-layout .portal-faq-link span {\r\n    color: #1556C0 !important;\r\n    text-decoration: underline !important;\r\n    text-underline-offset: 2px;\r\n}\r\n\/* FAQs icon and text light up together *\/\r\n.portal-layout .portal-faq-link:hover,\r\n.portal-layout .portal-faq-link:hover span,\r\n.portal-layout .portal-faq-link:hover .portal-faq-icon {\r\n    color: #258CFA !important;\r\n}\r\n\/* Smooth color transition *\/\r\n.portal-layout .portal-faq-link span,\r\n.portal-layout .portal-faq-icon {\r\n    transition: color 0.2s ease;\r\n}\r\n.portal-layout .portal-faq-link:hover .portal-faq-icon {\r\n    color: #258CFA;\r\n}\r\n\/* KEYBOARD FOCUS *\/\r\n.portal-layout a:focus-visible {\r\n    outline: 2px solid #0052c4;\r\n    outline-offset: 3px;\r\n}\r\n\/* MOBILE *\/\r\n@media (max-width: 480px) {\r\n    .portal-layout { gap: 12px; }\r\n    .portal-layout .portal-buttons { flex: 1 1 auto; }\r\n    .portal-layout .portal-button { width: 100%; }\r\n    .portal-layout .portal-faq { flex: 0 0 55px; }\r\n    .portal-layout .portal-faq-icon { width: 38px; height: 38px; }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function () {\r\n  document.documentElement.classList.toggle(\r\n    'formador-buttons-english',\r\n    \/^\\\/en(?:\\\/|$)\/i.test(window.location.pathname)\r\n  );\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-59d5348 student-agenda-column\" data-id=\"59d5348\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-74eee65 agenda-shortcode elementor-widget elementor-widget-shortcode\" data-id=\"74eee65\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n\n\n\n\n\n<div class=\"trainer-agenda-data\" hidden data-no-translation translate=\"no\">\n      \n      <span class=\"agenda-dataverse-session\"\n      data-date=\"2025-10-15\"\n      data-start=\"09&#x3A;00\"\n      data-end=\"12&#x3A;00\"\n      data-title=\"Tema&#x20;1.1\"><\/span>\n  \n        \n      <span class=\"agenda-dataverse-session\"\n      data-date=\"2025-10-20\"\n      data-start=\"14&#x3A;00\"\n      data-end=\"16&#x3A;30\"\n      data-title=\"Tema&#x20;3.1\"><\/span>\n  \n        \n  \n                                                                              <span class=\"agenda-dataverse-session\"\n              data-date=\"2025-10-22\"\n              data-start=\"16&#x3A;00\"\n              data-end=\"20&#x3A;00\"\n              data-title=\"Tema&#x20;4.1\"><\/span>\n                                                                                                            \n      <span class=\"agenda-dataverse-session\"\n      data-date=\"2026-11-18\"\n      data-start=\"09&#x3A;00\"\n      data-end=\"13&#x3A;00\"\n      data-title=\"Tema&#x20;2\"><\/span>\n  \n        \n      <span class=\"agenda-dataverse-session\"\n      data-date=\"2026-11-20\"\n      data-start=\"09&#x3A;00\"\n      data-end=\"13&#x3A;00\"\n      data-title=\"Tema&#x20;3\"><\/span>\n  \n        \n  \n                                                                                                                          <span class=\"agenda-dataverse-session\"\n              data-date=\"2026-11-26\"\n              data-start=\"20&#x3A;00\"\n              data-end=\"22&#x3A;00\"\n              data-title=\"Tema&#x20;4\"><\/span>\n                                                          <\/div>\n\n<script>document.documentElement.classList.toggle(\"trainer-agenda-english\", \/^\\\/en(?:\\\/|$)\/i.test(window.location.pathname));<\/script>\n\n<div class=\"trainer-agenda-widget agenda-upcoming\" data-no-translation translate=\"no\">\n\n  <div class=\"agenda-header\">\n    <div class=\"agenda-heading\">\n      <svg viewBox=\"0 0 24 24\" width=\"39\" height=\"39\"\n           fill=\"none\" stroke=\"currentColor\"\n           stroke-width=\"2\" stroke-linecap=\"round\"\n           stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"\/>\n        <path d=\"M7 3v4M17 3v4M3 10h18\"\/>\n        <path d=\"M8 14h1M12 14h1M16 14h1M8 18h1M12 18h1\"\/>\n      <\/svg>\n\n      <h2><span class=\"trainer-agenda-lang-pt\">Agenda<\/span><span class=\"trainer-agenda-lang-en\">Schedule<\/span><\/h2>\n    <\/div>\n\n    <span class=\"agenda-subtitle\">\n      <span class=\"trainer-agenda-lang-pt\">Pr\u00f3ximas sess\u00f5es<\/span><span class=\"trainer-agenda-lang-en\">Upcoming sessions<\/span>\n    <\/span>\n    \n  <\/div>\n\n  <div class=\"agenda-session-list\"\n       aria-live=\"polite\"><\/div>\n\n<\/div>\n\n<style>\n\/* Bilingual UI: language is selected using the \/en\/ URL prefix. *\/\n.trainer-agenda-widget .trainer-agenda-lang-en {display:none!important}\nhtml.trainer-agenda-english .trainer-agenda-widget .trainer-agenda-lang-pt {display:none!important}\nhtml.trainer-agenda-english .trainer-agenda-widget .trainer-agenda-lang-en {display:inline!important}\n\/* MAIN CARD *\/\n.trainer-agenda-widget.agenda-upcoming {\n    --agenda-blue: #1760e8;\n    --agenda-light: #3296ff;\n\n    width: 100% !important;\n    max-width: 100% !important;\n    padding: 22px 24px !important;\n\n    background: #ffffff !important;\n    border: none !important;\n    border-radius: 18px !important;\n\n    box-shadow: 0 4px 20px rgba(20,80,150,.07);\n\n    font-family: Arial, Helvetica, sans-serif !important;\n    box-sizing: border-box !important;\n}\n\n.agenda-upcoming *,\n.agenda-upcoming *::before,\n.agenda-upcoming *::after {\n    box-sizing: border-box;\n}\n\n\/* HEADER *\/\n.agenda-upcoming .agenda-header {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: flex-start !important;\n    flex-wrap: wrap;\n    gap: 24px !important;\n\n    margin: 0 0 20px !important;\n    padding: 0 !important;\n}\n\n.agenda-upcoming .agenda-heading {\n    display: flex;\n    align-items: center;\n    gap: 14px;\n}\n\n.agenda-upcoming .agenda-heading svg {\n    color: var(--agenda-blue);\n    flex-shrink: 0;\n}\n\n.agenda-upcoming .agenda-heading h2 {\n    margin: 0 !important;\n    padding: 0 !important;\n    color: #1256d9 !important;\n    font-size: 28px !important;\n    font-weight: 700 !important;\n    line-height: 1.2 !important;\n    text-transform: none !important;\n}\n\n.agenda-upcoming .agenda-subtitle {\n    color: #2468ee !important;\n    font-size: 21px !important;\n    font-weight: 400 !important;\n    font-style: italic;\n    line-height: 1.3;\n}\n\n\/* SESSION LIST *\/\n.agenda-upcoming .agenda-session-list {\n    display: flex;\n    flex-direction: column;\n    gap: 9px;\n\n    width: 100%;\n    max-height: 230px;\n    overflow-y: auto;\n    overflow-x: hidden;\n\n    scrollbar-width: thin;\n    scrollbar-color: #b6d4fb transparent;\n}\n\n\/* INDIVIDUAL SESSION *\/\n.agenda-upcoming .agenda-session {\n    display: grid;\n    grid-template-columns: 114px minmax(0, 1fr);\n    align-items: stretch;\n    width: 100%;\n    min-height: 73px;\n}\n\n\/* BLUE DATE BLOCK *\/\n.agenda-upcoming .agenda-session-date {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    justify-content: center;\n\n    padding: 10px 17px;\n\n    background: #3296ff !important;\n    color: #ffffff !important;\n\n    border-radius: 17px;\n\n    font-size: 15px;\n    font-weight: 600;\n    line-height: 1.3;\n}\n\n.agenda-upcoming .agenda-session-date span {\n    display: block;\n    color: #ffffff !important;\n}\n\n\/* WHITE SESSION DETAILS *\/\n.agenda-upcoming .agenda-session-details {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr) 105px;\n    align-items: center;\n\n    min-width: 0;\n    padding: 11px 12px 11px 19px;\n\n    background: #ffffff !important;\n    border: 2px solid #c6defe;\n    border-radius: 17px;\n}\n\n\/* TIME AND TITLE *\/\n.agenda-upcoming .agenda-session-info {\n    min-width: 0;\n    padding-right: 12px;\n}\n\n.agenda-upcoming .agenda-session-time {\n    color: #2169ef !important;\n    font-size: 15px;\n    font-weight: 500;\n    line-height: 1.3;\n}\n\n.agenda-upcoming .agenda-session-title {\n    color: #1459e5 !important;\n    font-size: 15px;\n    font-weight: 600;\n    line-height: 1.3;\n    overflow-wrap: anywhere;\n}\n\n\/* RIGHT LOCATION *\/\n.agenda-upcoming .agenda-session-location {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    min-height: 46px;\n    padding: 5px 7px;\n\n    border-left: 2px solid #88b7fa;\n\n    color: #2468ee !important;\n    font-size: 14px;\n    font-weight: 600;\n    text-align: center;\n    overflow-wrap: anywhere;\n}\n\n\/* EMPTY STATE *\/\n.agenda-upcoming .agenda-empty {\n    padding: 24px 12px;\n    color: #64748b;\n    text-align: center;\n    font-size: 14px;\n}\n\n\/* Consistent spacing between all sessions *\/\n.trainer-agenda-widget.agenda-upcoming .agenda-session-list {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 9px !important;\n}\n\n\/* Remove theme spacing from individual sessions *\/\n.trainer-agenda-widget.agenda-upcoming .agenda-session {\n    margin: 0 !important;\n    padding: 0 !important;\n    flex: 0 0 auto !important;\n}\n\n\/* Remove unexpected margins inside sessions *\/\n.trainer-agenda-widget.agenda-upcoming .agenda-session-date,\n.trainer-agenda-widget.agenda-upcoming .agenda-session-details,\n.trainer-agenda-widget.agenda-upcoming .agenda-session-info,\n.trainer-agenda-widget.agenda-upcoming .agenda-session-time,\n.trainer-agenda-widget.agenda-upcoming .agenda-session-title,\n.trainer-agenda-widget.agenda-upcoming .agenda-session-location {\n    margin: 0 !important;\n}\n\n\/* Make each agenda event more compact *\/\n.agenda-upcoming .agenda-session {\n    min-height: 55px !important;\n}\n\n\/* Reduce top and bottom padding *\/\n.agenda-upcoming .agenda-session-details {\n    padding-top: 5px !important;\n    padding-bottom: 5px !important;\n}\n\n\/* Reduce padding inside the blue date block *\/\n.agenda-upcoming .agenda-session-date {\n    padding-top: 5px !important;\n    padding-bottom: 5px !important;\n}\n\n\/* Reduce space between events *\/\n.agenda-upcoming .agenda-session-list {\n    gap: 6px !important;\n}\n\n\/* TABLET *\/\n@media (max-width: 900px) {\n    .trainer-agenda-widget.agenda-upcoming {\n        padding: 18px !important;\n    }\n\n    .agenda-upcoming .agenda-heading h2 {\n        font-size: 24px !important;\n    }\n\n    .agenda-upcoming .agenda-subtitle {\n        font-size: 18px !important;\n    }\n}\n\n\/* MOBILE *\/\n@media (max-width: 600px) {\n    .trainer-agenda-widget.agenda-upcoming {\n        padding: 14px !important;\n    }\n\n    .agenda-upcoming .agenda-header {\n        gap: 8px !important;\n        margin-bottom: 16px !important;\n    }\n\n    .agenda-upcoming .agenda-heading h2 {\n        font-size: 21px !important;\n    }\n\n    .agenda-upcoming .agenda-heading svg {\n        width: 30px;\n        height: 30px;\n    }\n\n    .agenda-upcoming .agenda-subtitle {\n        font-size: 16px !important;\n    }\n\n    .agenda-upcoming .agenda-session {\n        grid-template-columns: 76px minmax(0, 1fr);\n        min-height: 75px;\n    }\n\n    .agenda-upcoming .agenda-session-date {\n        padding: 8px;\n        font-size: 12px;\n        border-radius: 12px;\n    }\n\n    .agenda-upcoming .agenda-session-details {\n        grid-template-columns: minmax(0, 1fr) 65px;\n        padding: 8px;\n        border-radius: 12px;\n    }\n\n    .agenda-upcoming .agenda-session-time,\n    .agenda-upcoming .agenda-session-title {\n        font-size: 12px;\n    }\n\n    .agenda-upcoming .agenda-session-location {\n        font-size: 11px;\n        padding: 4px;\n    }\n}\n\n\n\/* =========================================\n   TRAINER AGENDA - CONSISTENT CONTAINER HEIGHT\n========================================= *\/\n\n\/* Keep the agenda container at a consistent height *\/\n.trainer-agenda-widget.agenda-upcoming {\n    min-height: 340px !important;\n\n    display: flex !important;\n    flex-direction: column !important;\n}\n\n\/* Let the session list fill the remaining space *\/\n.trainer-agenda-widget.agenda-upcoming .agenda-session-list {\n    flex: 1 1 auto !important;\n    min-height: 0 !important;\n}\n\n\/* Keep individual sessions at their natural height *\/\n.trainer-agenda-widget.agenda-upcoming .agenda-session {\n    flex: 0 0 auto !important;\n}\n\n<\/style>\n\n<script>\n(function () {\n  const widget = document.querySelector(\n    \".trainer-agenda-widget.agenda-upcoming\"\n  );\n\n  if (!widget) return;\n\n  const isEnglish = \/^\\\/en(?:\\\/|$)\/i.test(window.location.pathname);\n\n  const agendaEvents = Array.from(\n    document.querySelectorAll(\".trainer-agenda-data .agenda-dataverse-session\")\n  ).map(item => ({\n    date: item.dataset.date || \"\",\n    start: item.dataset.start || \"\",\n    end: item.dataset.end || \"\",\n    title: item.dataset.title || (isEnglish ? \"Session\" : \"Sess\u00e3o\"),\n    location: \"Online\"\n  }));\n\n  \/\/ Show one practical session per selected date\/time, even when multiple students chose it.\n  \/\/ Collapse duplicate join records and repeat student selections.\n  const uniqueEvents = Array.from(new Map(\n    agendaEvents.map(event => [\n      [event.date, event.start, event.end, event.title].join(\"|\"), event\n    ])\n  ).values());\n\n  const dayNames = isEnglish\n    ? [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"]\n    : [\"DOM\", \"SEG\", \"TER\", \"QUA\", \"QUI\", \"SEX\", \"S\u00c1B\"];\n\n  const monthNames = isEnglish\n    ? [\"JAN\", \"FEB\", \"MAR\", \"APR\", \"MAY\", \"JUN\", \"JUL\", \"AUG\", \"SEP\", \"OCT\", \"NOV\", \"DEC\"]\n    : [\"JAN\", \"FEV\", \"MAR\", \"ABR\", \"MAI\", \"JUN\", \"JUL\", \"AGO\", \"SET\", \"OUT\", \"NOV\", \"DEZ\"];\n\n  function escapeHtml(value) {\n    return String(value ?? \"\")\n      .replaceAll(\"&\", \"&amp;\")\n      .replaceAll(\"<\", \"&lt;\")\n      .replaceAll(\">\", \"&gt;\")\n      .replaceAll('\"', \"&quot;\")\n      .replaceAll(\"'\", \"&#039;\");\n  }\n\n  function formatSessionDate(dateString) {\n    const [year, month, day] =\n      dateString.split(\"-\").map(Number);\n\n    const date = new Date(year, month - 1, day);\n\n    return {\n      weekday: dayNames[date.getDay()],\n      label: String(day).padStart(2, \"0\")\n        + \" \" + monthNames[month - 1]\n    };\n  }\n\n  function renderAgenda() {\n    const container = widget.querySelector(\n      \".agenda-session-list\"\n    );\n\n    if (!container) return;\n\n    const now = new Date();\n\n    const events = uniqueEvents\n      .filter(event => {\n        const start = new Date(\n          event.date + \"T\" + event.start + \":00\"\n        );\n        return start >= now;\n      })\n      .sort((a, b) =>\n        (a.date + a.start).localeCompare(\n          b.date + b.start\n        )\n      )\n      .slice(0, 10);\n\n    if (!events.length) {\n      container.innerHTML = `\n        <div class=\"agenda-empty\">\n          ${isEnglish ? \"There are no upcoming sessions scheduled.\" : \"N\u00e3o existem pr\u00f3ximas sess\u00f5es agendadas.\"}\n        <\/div>\n      `;\n      return;\n    }\n\n    container.innerHTML = events.map(event => {\n      const date = formatSessionDate(event.date);\n\n      return `\n        <div class=\"agenda-session\">\n\n          <div class=\"agenda-session-date\">\n            <span>${date.weekday}<\/span>\n            <span>${date.label}<\/span>\n          <\/div>\n\n          <div class=\"agenda-session-details\">\n\n            <div class=\"agenda-session-info\">\n              <div class=\"agenda-session-time\">\n                ${escapeHtml(event.start)}\n                \u2013\n                ${escapeHtml(event.end)}\n              <\/div>\n\n              <div class=\"agenda-session-title notranslate\" data-no-translation translate=\"no\">\n                ${escapeHtml(event.title)}\n              <\/div>\n            <\/div>\n\n            <div class=\"agenda-session-location\">\n              ${escapeHtml(event.location || \"\")}\n            <\/div>\n\n          <\/div>\n\n        <\/div>\n      `;\n    }).join(\"\");\n  }\n\n  renderAgenda();\n})();\n<\/script>\n\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-162ccc6 equal-height-layout elementor-section-boxed elementor-section-height-default elementor-section-height-default wd-section-disabled\" data-id=\"162ccc6\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-2ead3af\" data-id=\"2ead3af\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-47ab740 elementor-widget elementor-widget-shortcode\" data-id=\"47ab740\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n\n\n\n\n<div class=\"trainer-notices-widget\" data-no-translation translate=\"no\">\n\n    <!-- HEADER -->\n    <div class=\"notices-header\">\n\n        <div class=\"notices-header-left\">\n\n            <span class=\"notices-header-icon\" aria-hidden=\"true\">\n                <i class=\"icon icon-megaphone\"><\/i>\n            <\/span>\n\n            <h2><span class=\"trainer-notices-pt\">Avisos<\/span><span class=\"trainer-notices-en\">Notices<\/span><\/h2>\n\n        <\/div>\n\n        <a class=\"notices-view-all\" href=\".\/avisos\">\n            <span><span class=\"trainer-notices-pt\">Ver todos<\/span><span class=\"trainer-notices-en\">View all<\/span><\/span>\n\n            <svg viewBox=\"0 0 24 24\"\n                 width=\"22\" height=\"22\"\n                 fill=\"none\"\n                 stroke=\"currentColor\"\n                 stroke-width=\"2\"\n                 stroke-linecap=\"round\"\n                 stroke-linejoin=\"round\"\n                 aria-hidden=\"true\">\n                <path d=\"m9 5 7 7-7 7\"\/>\n            <\/svg>\n        <\/a>\n\n    <\/div>\n\n    <!-- DYNAMIC NOTICES -->\n    <div class=\"notices-list\" aria-live=\"polite\"><\/div>\n\n\n<!-- Dataverse trainer notices: hidden records for JavaScript -->\n<div class=\"notices-dataverse-source\" hidden>\n                        <div class=\"notice-dataverse-record\"\n      data-id=\"1\"\n      data-title=\"Certificado&#x20;de&#x20;Compet&#x00EA;ncias&#x20;Pedag&#x00F3;gicas&#x20;em&#x20;falta\"\n      data-title-en=\"Certificate&#x20;of&#x20;Pedagogical&#x20;Competencies&#x20;Missing\"\n      data-description=\"Verific&#x00E1;mos&#x20;que&#x20;o&#x20;seu&#x20;Certificado&#x20;de&#x20;Compet&#x00EA;ncias&#x20;Pedag&#x00F3;gicas&#x20;&#x28;CCP&#x29;&#x20;n&#x00E3;o&#x20;est&#x00E1;&#x20;dispon&#x00ED;vel&#x20;no&#x20;Portal&#x20;do&#x20;Formador.&#x0A;Solicitamos&#x20;que&#x20;fa&#x00E7;a&#x20;o&#x20;carregamento&#x20;do&#x20;CCP&#x20;com&#x20;a&#x20;maior&#x20;brevidade&#x20;poss&#x00ED;vel,&#x20;para&#x20;completar&#x20;e&#x20;regularizar&#x20;o&#x20;seu&#x20;perfil&#x20;de&#x20;formador.&#x0A;\"\n      data-description-en=\"We&#x20;have&#x20;verified&#x20;that&#x20;your&#x20;Certificate&#x20;of&#x20;Pedagogical&#x20;Competencies&#x20;&#x28;CCP&#x29;&#x20;is&#x20;not&#x20;available&#x20;on&#x20;the&#x20;Trainer&#x20;Portal.&#x0A;Please&#x20;upload&#x20;your&#x20;CCP&#x20;as&#x20;soon&#x20;as&#x20;possible&#x20;to&#x20;complete&#x20;and&#x20;update&#x20;your&#x20;trainer&#x20;profile.\"\n      data-created=\"2026-10-14T09&#x3A;28&#x3A;03Z\"\n      data-start=\"2026-10-12T00&#x3A;00&#x3A;00Z\"\n      data-end=\"2026-11-27T00&#x3A;00&#x3A;00Z\"\n      data-priority=\"medium\"><\/div>\n  <\/div>\n\n\n<\/div>\n\n\n<style>\n\/* The interface is translated explicitly; TranslatePress leaves this widget alone. *\/\n.trainer-notices-widget .trainer-notices-en {display:none!important}\n.trainer-notices-widget.trainer-notices-english .trainer-notices-pt {display:none!important}\n.trainer-notices-widget.trainer-notices-english .trainer-notices-en {display:inline!important}\n\n\/* =========================================\n   MAIN CONTAINER\n========================================= *\/\n\n.trainer-notices-widget {\n    width: 100%;\n    height: 300px !important;\n\n    display: flex !important;\n    flex-direction: column !important;\n\n    box-sizing: border-box !important;\n\n    padding: 20px 16px 16px;\n\n    background: #ffffff;\n    border-radius: 18px;\n\n    box-shadow: 0 4px 20px rgba(20, 80, 150, 0.07);\n\n    font-family: inherit;\n}\n\n\n\/* =========================================\n   HEADER\n========================================= *\/\n\n.trainer-notices-widget .notices-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n\n    gap: 12px;\n    margin-bottom: 12px;\n\n    flex: 0 0 auto !important;\n}\n\n.trainer-notices-widget .notices-header-left {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    min-width: 0;\n}\n\n\n\/* ElementsKit Megaphone Icon *\/\n\n.trainer-notices-widget .notices-header-icon {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n\n    width: 42px;\n    height: 42px;\n    flex-shrink: 0;\n\n    color: #1760e8 !important;\n}\n\n.trainer-notices-widget .notices-header-icon i {\n    font-size: 38px !important;\n    line-height: 1;\n    color: inherit !important;\n}\n\n\n\/* Avisos Heading *\/\n\n.trainer-notices-widget .notices-header h2 {\n    margin: 0 !important;\n    padding: 0 !important;\n\n    color: #1459e8 !important;\n\n    font-size: 27px !important;\n    font-weight: 750 !important;\n    line-height: 1.2;\n\n    text-transform: none !important;\n    letter-spacing: normal !important;\n}\n\n\n\/* =========================================\n   VER TODOS\n========================================= *\/\n\n.trainer-notices-widget .notices-view-all {\n    display: inline-flex;\n    align-items: center;\n\n    gap: 4px;\n    flex-shrink: 0;\n\n    color: #2269f0 !important;\n\n    font-size: 14px !important;\n    font-weight: 400 !important;\n    line-height: 1.35 !important;\n\n    text-transform: none !important;\n    letter-spacing: normal !important;\n\n    text-decoration: none !important;\n}\n\n.trainer-notices-widget .notices-view-all svg {\n    width: 22px;\n    height: 22px;\n\n    fill: none !important;\n    stroke: currentColor !important;\n\n    transition: transform 0.2s ease;\n}\n\n.trainer-notices-widget .notices-view-all:hover {\n    color: #0b48c6 !important;\n}\n\n.trainer-notices-widget .notices-view-all:hover svg {\n    transform: translateX(3px);\n}\n\n\n\/* =========================================\n   NOTICES LIST\n========================================= *\/\n\n.trainer-notices-widget .notices-list {\n    display: flex !important;\n    flex-direction: column !important;\n\n    gap: 6px !important;\n\n    flex: 1 1 auto !important;\n    min-height: 0 !important;\n    max-height: none !important;\n\n    overflow-y: auto !important;\n    overflow-x: hidden !important;\n\n    scrollbar-width: thin;\n    scrollbar-color: #bfdcff transparent;\n}\n\n\n\/* Scrollbar - Chrome, Edge, Safari *\/\n\n.trainer-notices-widget .notices-list::-webkit-scrollbar {\n    width: 5px;\n}\n\n.trainer-notices-widget .notices-list::-webkit-scrollbar-track {\n    background: transparent;\n}\n\n.trainer-notices-widget .notices-list::-webkit-scrollbar-thumb {\n    background: #bfdcff;\n    border-radius: 10px;\n}\n\n\n\/* =========================================\n   INDIVIDUAL NOTICE\n========================================= *\/\n\n.trainer-notices-widget .notice-item {\n    display: flex;\n    align-items: center;\n\n    gap: 14px;\n\n    flex: 0 0 auto !important;\n\n    min-height: 57px;\n    padding: 7px 12px;\n\n    margin: 0 !important;\n\n    border: 1.5px solid #bfdcff;\n    border-radius: 14px;\n\n    background: #ffffff;\n\n    box-sizing: border-box;\n}\n\n\n\/* =========================================\n   PRIORITY ICONS\n========================================= *\/\n\n.trainer-notices-widget .notice-alert-icon {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    width: 38px;\n    height: 38px;\n\n    flex: 0 0 38px;\n\n    border-radius: 50%;\n\n    color: #ffffff !important;\n\n    font-size: 27px;\n    font-weight: 800;\n    line-height: 1;\n\n    box-shadow: 0 2px 7px rgba(0, 0, 0, 0.12);\n}\n\n\/* High priority - Red *\/\n.trainer-notices-widget .notice-alert-icon.high {\n    background: #ed2029;\n}\n\n\/* Medium priority - Orange *\/\n.trainer-notices-widget .notice-alert-icon.medium {\n    background: #ff792e;\n}\n\n\/* Low priority - Green *\/\n.trainer-notices-widget .notice-alert-icon.low {\n    background: #0bb569;\n}\n\n\n\/* =========================================\n   NOTICE CONTENT\n========================================= *\/\n\n.trainer-notices-widget .notice-content {\n    flex: 1 1 auto;\n    min-width: 0;\n}\n\n\n\/* Notice Title *\/\n\n.trainer-notices-widget .notice-title {\n    margin: 0 !important;\n    padding: 0 !important;\n\n    color: #1559e8 !important;\n\n    font-size: 12px !important;\n    font-weight: 700 !important;\n    line-height: 1.3 !important;\n\n    text-transform: none !important;\n    letter-spacing: normal !important;\n}\n\n\n\/* Notice Description *\/\n\n.trainer-notices-widget .notice-description {\n    margin: 2px 0 0 !important;\n    padding: 0 !important;\n\n    color: #2269f0 !important;\n\n    font-size: 14px !important;\n    font-weight: 400 !important;\n    line-height: 1.35 !important;\n\n    text-transform: none !important;\n    letter-spacing: normal !important;\n}\n\n\n\/* =========================================\n   NOTICE DATE\n========================================= *\/\n\n.trainer-notices-widget .notice-date {\n    flex: 0 0 auto;\n\n    margin-left: 8px;\n\n    color: #2269f0 !important;\n\n    font-size: 14px !important;\n    font-weight: 400 !important;\n    line-height: 1.35 !important;\n\n    text-transform: none !important;\n    letter-spacing: normal !important;\n\n    white-space: nowrap;\n    text-align: right;\n}\n\n\n\/* =========================================\n   EMPTY STATE\n========================================= *\/\n\n.trainer-notices-widget .notices-empty {\n    padding: 20px 12px;\n\n    text-align: center;\n\n    color: #6782a5;\n    font-size: 14px;\n}\n\n\n\/* =========================================\n   RESPONSIVE\n========================================= *\/\n\n@media (max-width: 600px) {\n\n    .trainer-notices-widget {\n        padding: 16px 12px;\n    }\n\n    .trainer-notices-widget .notices-header h2 {\n        font-size: 23px !important;\n    }\n\n    .trainer-notices-widget .notices-header-icon {\n        width: 36px;\n        height: 36px;\n    }\n\n    .trainer-notices-widget .notices-header-icon i {\n        font-size: 32px !important;\n    }\n\n    .trainer-notices-widget .notice-item {\n        gap: 10px;\n        padding: 10px;\n    }\n\n    .trainer-notices-widget .notice-alert-icon {\n        width: 32px;\n        height: 32px;\n        flex-basis: 32px;\n\n        font-size: 23px;\n    }\n\n    .trainer-notices-widget .notice-date {\n        font-size: 12px !important;\n        margin-left: 0;\n    }\n\n}\n\n@media (max-width: 420px) {\n\n    .trainer-notices-widget .notice-item {\n        flex-wrap: wrap;\n    }\n\n    .trainer-notices-widget .notice-date {\n        width: 100%;\n        text-align: right;\n    }\n\n}\n<\/style>\n\n\n\n<script>\n(function () {\n\n    const widget = document.querySelector(\n        \".trainer-notices-widget\"\n    );\n\n    if (!widget) return;\n\n    const isEnglish = \/^\\\/en(?:\\\/|$)\/i.test(window.location.pathname);\n    widget.classList.toggle(\"trainer-notices-english\", isEnglish);\n\n    const list = widget.querySelector(\".notices-list\");\n\n    if (!list) return;\n\n    \/\/ =========================================\n    \/\/ READ NOTICES FROM DATAPRESS\n    \/\/ =========================================\n\n    const records = widget.querySelectorAll(\n        \".notice-dataverse-record\"\n    );\n\n    const notices = Array.from(records).map(record => ({\n        id: record.dataset.id || \"\",\n        title: (isEnglish && (record.dataset.titleEn || \"\").trim()) || record.dataset.title || \"\",\n        description: (isEnglish && (record.dataset.descriptionEn || \"\").trim()) || record.dataset.description || \"\",\n        created: record.dataset.created || \"\",\n        start: record.dataset.start || \"\",\n        end: record.dataset.end || \"\",\n        priority: record.dataset.priority || \"low\"\n    }));\n\n    \/\/ =========================================\n    \/\/ ESCAPE HTML\n    \/\/ =========================================\n\n    function escapeHtml(value) {\n        return String(value ?? \"\").replace(\n            \/[&<>\"']\/g,\n            char => ({\n                \"&\": \"&amp;\",\n                \"<\": \"&lt;\",\n                \">\": \"&gt;\",\n                '\"': \"&quot;\",\n                \"'\": \"&#39;\"\n            })[char]\n        );\n    }\n\n    \/\/ =========================================\n    \/\/ DATE HANDLING\n    \/\/ =========================================\n\n    function parseDate(value) {\n        if (!value) return null;\n\n        const date = new Date(value);\n\n        return Number.isNaN(date.getTime())\n            ? null\n            : date;\n    }\n\n    function formatDate(value) {\n\n        const date = parseDate(value);\n\n        if (!date) return \"\";\n\n        return new Intl.DateTimeFormat(isEnglish ? \"en-GB\" : \"pt-PT\", {\n            day: \"2-digit\",\n            month: \"short\",\n            year: \"numeric\",\n            timeZone: \"Europe\/Lisbon\"\n        }).format(date);\n    }\n\n    \/\/ =========================================\n    \/\/ CHECK VISIBILITY PERIOD\n    \/\/ =========================================\n\n    function isNoticeVisible(notice, now) {\n\n        const start = parseDate(notice.start);\n        const end = parseDate(notice.end);\n\n        \/\/ Do not display records with invalid\n        \/\/ start\/end dates.\n        if (!start || !end) {\n            return false;\n        }\n\n        return now >= start && now <= end;\n    }\n\n    \/\/ =========================================\n    \/\/ RENDER NOTICES\n    \/\/ =========================================\n\n    function renderNotices() {\n\n        const now = new Date();\n\n        \/\/ Remove duplicate records, if any.\n        const seen = new Set();\n\n        const visibleNotices = notices\n            .filter(notice => isNoticeVisible(notice, now))\n            .filter(notice => {\n\n                if (!notice.id) return true;\n\n                if (seen.has(notice.id)) {\n                    return false;\n                }\n\n                seen.add(notice.id);\n                return true;\n            })\n            .sort((a, b) => {\n                const dateA = parseDate(a.created);\n                const dateB = parseDate(b.created);\n\n                return (dateB?.getTime() || 0) -\n                       (dateA?.getTime() || 0);\n            });\n\n        if (visibleNotices.length === 0) {\n\n            list.innerHTML = `\n                <div class=\"notices-empty\">\n                    ${isEnglish ? \"There are no notices available.\" : \"N\u00e3o existem avisos dispon\u00edveis.\"}\n                <\/div>\n            `;\n\n            return;\n        }\n\n        const priorityLabels = isEnglish\n            ? { high: \"High\", medium: \"Medium\", low: \"Low\" }\n            : { high: \"Alta\", medium: \"M\u00e9dia\", low: \"Baixa\" };\n\n        list.innerHTML = visibleNotices.map(notice => {\n\n            const priority = [\"high\", \"medium\", \"low\"]\n                .includes(notice.priority)\n                ? notice.priority\n                : \"low\";\n\n            const dateLabel = formatDate(notice.created);\n\n            return `\n                <div class=\"notice-item\"\n                     data-notice-id=\"${escapeHtml(notice.id)}\">\n\n                    <span\n                        class=\"notice-alert-icon ${priority}\"\n                        role=\"img\"\n                        aria-label=\"${isEnglish ? \"Priority\" : \"Prioridade\"} ${priorityLabels[priority]}\">\n                        !\n                    <\/span>\n\n                    <div class=\"notice-content\">\n\n                        <h3 class=\"notice-title\" data-no-translation translate=\"no\">\n                            ${escapeHtml(notice.title)}\n                        <\/h3>\n\n                        <p class=\"notice-description\" data-no-translation translate=\"no\">\n                            ${escapeHtml(notice.description)}\n                        <\/p>\n\n                    <\/div>\n\n                    <time\n                        class=\"notice-date\"\n                        datetime=\"${escapeHtml(notice.created)}\">\n                        ${escapeHtml(dateLabel)}\n                    <\/time>\n\n                <\/div>\n            `;\n        }).join(\"\");\n    }\n\n    \/\/ =========================================\n    \/\/ INITIAL RENDER\n    \/\/ =========================================\n\n    renderNotices();\n\n    \/\/ Recheck notice visibility every minute.\n    \/\/ Notices can appear\/disappear without\n    \/\/ requiring a manual page refresh.\n    setInterval(renderNotices, 60000);\n\n})();\n<\/script>\n\n\n\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-8e4c4e3\" data-id=\"8e4c4e3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-485a6cb elementor-section-boxed elementor-section-height-default elementor-section-height-default wd-section-disabled\" data-id=\"485a6cb\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[],&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-1c29e84\" data-id=\"1c29e84\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6aee4b9 elementor-position-inline-start centered-icon-box elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"6aee4b9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-graduation-cap\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h6 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tMoodle\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h6>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-731cb7e moodle-text elementor-widget elementor-widget-wd_text_block\" data-id=\"731cb7e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"wd_text_block.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"wd-text-block reset-last-child text-left\">\n\t\t\t\n\t\t\t<p><span style=\"font-family: Poppins, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; text-align: right;\">Aceda \u00e0 plataforma Moodle para consultar os seus cursos,&nbsp; materiais e atividades.<\/span><span style=\"font-size: 14px;\"><\/span><\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-638c5b4 bottom-button elementor-widget elementor-widget-html\" data-id=\"638c5b4\" 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<style>\r\n\/* Moodle button *\/\r\n.moodle-access-button {\r\n    position: relative;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    width: 100%;\r\n    min-height: 84px;\r\n    padding: 12px 48px;\r\n\r\n    background: #258CFA;\r\n    color: #ffffff !important;\r\n\r\n    border: none;\r\n    border-radius: 7px;\r\n\r\n    font-family: inherit;\r\n    font-size: 18px!important;\r\n    font-weight: 500!important;\r\n    line-height: 1.4;\r\n    text-align: center;\r\n    text-decoration: none !important;\r\n\r\n    box-shadow: 0 3px 7px rgba(37, 140, 250, 0.16);\r\n\r\n    transition: background 0.2s ease,\r\n                box-shadow 0.2s ease;\r\n}\r\n\r\n\/* Keep text white *\/\r\n.moodle-access-button .moodle-button-text {\r\n    color: #ffffff !important;\r\n}\r\n\r\n\/* Arrow on the right *\/\r\n\/* Circular arrow *\/\r\n.moodle-access-button .moodle-button-arrow {\r\n    position: absolute;\r\n    right: 16px;\r\n    top: 50%;\r\n    transform: translateY(-50%);\r\n\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    width: 28px;\r\n    height: 28px;\r\n    flex: 0 0 28px;\r\n\r\n    border: 2px solid #ffffff;\r\n    border-radius: 50%;\r\n    color: #ffffff !important;\r\n}\r\n\r\n.moodle-access-button .moodle-button-arrow svg {\r\n    width: 20px;\r\n    height: 20px;\r\n    fill: none !important;\r\n    stroke: currentColor !important;\r\n}\r\n\r\n\/* Hover *\/\r\n.moodle-access-button:hover {\r\n    background: #1479EB;\r\n    box-shadow: 0 4px 12px rgba(37, 140, 250, 0.25);\r\n    color: #ffffff !important;\r\n}\r\n\r\n\/* Keyboard accessibility *\/\r\n.moodle-access-button:focus-visible {\r\n    outline: 3px solid #94caff;\r\n    outline-offset: 3px;\r\n}\r\n<\/style>\r\n\r\n<a href=\"#\"\r\n   class=\"moodle-access-button\"\r\n   target=\"_blank\"\r\n   rel=\"noopener noreferrer\">\r\n\r\n    <span class=\"moodle-button-text\">\r\n        Aceder ao Moodle\r\n    <\/span>\r\n\r\n    <span class=\"moodle-button-arrow\">\r\n        <svg viewBox=\"0 0 24 24\"\r\n             width=\"20\" height=\"20\"\r\n             fill=\"none\"\r\n             stroke=\"currentColor\"\r\n             stroke-width=\"2\"\r\n             stroke-linecap=\"round\"\r\n             stroke-linejoin=\"round\"\r\n             aria-hidden=\"true\">\r\n            <path d=\"m9 5 7 7-7 7\"\/>\r\n        <\/svg>\r\n    <\/span>\r\n<\/a>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5dfd438 elementor-section-boxed elementor-section-height-default elementor-section-height-default wd-section-disabled\" data-id=\"5dfd438\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-447ba30\" data-id=\"447ba30\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-227b362 elementor-widget elementor-widget-shortcode\" data-id=\"227b362\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n\n\n\n\n\n    <div id=\"trainer-dataverse-data\"\n         hidden\n         data-no-translation\n         translate=\"no\"\n         data-name=\"Ricardo&#x20;Miguel&#x20;Ferreira&#x20;Lopes\"\n         data-number=\"202600256\"\n         data-photo=\"https&#x3A;&#x2F;&#x2F;staging.academiaclinicadragao.com&#x2F;en&#x2F;wp-json&#x2F;integration-cds&#x2F;v1&#x2F;image&#x3F;table&#x3D;bpe_formador&amp;id&#x3D;46712fcb-eaa2-f111-b8dd-7ced8d5f6c91&amp;column&#x3D;bpe_fotografia&amp;isThumb&#x3D;1\">\n    <\/div>\n\n\n<style>\n.trainer-lang-en { display: none !important; }\nhtml.trainer-home-english .trainer-lang-pt { display: none !important; }\nhtml.trainer-home-english .trainer-lang-en { display: inline !important; }\n<\/style>\n\n<script>\n(function () {\n    const isEnglish = \/^\\\/en(?:\\\/|$)\/i.test(window.location.pathname);\n    document.documentElement.classList.toggle('trainer-home-english', isEnglish);\n\n    \/\/ Elementor page title: update even when no trainer record is available.\n    function updateTrainerTitle() {\n        const title = document.querySelector(\n            '.formador-page-title .elementor-heading-title, ' +\n            '.formador-page-title h1, ' +\n            '.formador-page-title h2, ' +\n            '.formador-page-title h3, ' +\n            '.formador-page-title'\n        );\n        if (!title) return;\n        const text = isEnglish ? 'Trainer Portal' : 'Portal do Formador';\n        if (title.textContent.trim() !== text) title.textContent = text;\n        title.setAttribute('data-no-translation', '');\n        title.setAttribute('translate', 'no');\n        title.classList.add('notranslate');\n    }\n\n    const data = document.getElementById('trainer-dataverse-data');\n    const name = data ? (data.dataset.name || '') : '';\n    const number = data ? (data.dataset.number || '') : '';\n    const photoUrl = data ? (data.dataset.photo || '') : '';\n\n    let photoObserver = null;\n\n    function protectedDataverseValue(value) {\n        const span = document.createElement('span');\n        span.className = 'notranslate';\n        span.setAttribute('data-no-translation', '');\n        span.setAttribute('translate', 'no');\n        span.textContent = value;\n        return span;\n    }\n\n    \/\/ =====================================\n    \/\/ TRAINER PHOTOGRAPH\n    \/\/ =====================================\n    function applyTrainerPhoto() {\n        if (!photoUrl) return false;\n\n        const image = document.querySelector('.trainer-photo img');\n        if (!image) return false;\n\n        \/\/ Remove Elementor \/ WoodMart image sources\n        image.removeAttribute('srcset');\n        image.removeAttribute('sizes');\n        image.removeAttribute('data-src');\n        image.removeAttribute('data-srcset');\n        image.removeAttribute('data-lazy-src');\n        image.removeAttribute('data-lazy-srcset');\n\n        \/\/ Handle responsive picture elements\n        const picture = image.closest('picture');\n        if (picture) {\n            picture.querySelectorAll('source').forEach(source => {\n                source.removeAttribute('srcset');\n                source.removeAttribute('sizes');\n            });\n        }\n\n        \/\/ Apply Dataverse image only when needed\n        image.loading = 'eager';\n        if (image.getAttribute('src') !== photoUrl) {\n            image.src = photoUrl;\n        }\n        image.alt = isEnglish ? 'Trainer photo' : 'Fotografia do formador';\n        return true;\n    }\n\n    \/\/ =====================================\n    \/\/ UPDATE ELEMENTOR WIDGETS\n    \/\/ =====================================\n    function updateTrainerWidgets() {\n        updateTrainerTitle();\n        if (!data) return;\n\n        \/\/ GREETING\n        const greeting = document.querySelector(\n            '.trainer-greeting h6, ' +\n            '.trainer-greeting .elementor-heading-title, ' +\n            '.trainer-greeting p'\n        );\n        if (greeting && name) {\n            greeting.replaceChildren(\n                document.createTextNode(isEnglish ? 'Hello, ' : 'Ol\u00e1, '),\n                protectedDataverseValue(name)\n            );\n            greeting.setAttribute('data-no-translation', '');\n        }\n\n        \/\/ TRAINER NUMBER (keeps the original single-line layout)\n        const numberElement = document.querySelector(\n            '.trainer-number h6, ' +\n            '.trainer-number .elementor-heading-title, ' +\n            '.trainer-number p'\n        );\n        if (numberElement && number) {\n            numberElement.replaceChildren(\n                document.createTextNode(isEnglish ? 'Trainer no.: ' : 'N\u00ba formador: '),\n                protectedDataverseValue(number)\n            );\n            numberElement.setAttribute('data-no-translation', '');\n        }\n\n        \/\/ PHOTO\n        applyTrainerPhoto();\n\n        \/\/ Observe changes made by Elementor or WoodMart\n        const photoWidget = document.querySelector('.trainer-photo');\n        if (photoWidget && photoUrl && !photoObserver) {\n            photoObserver = new MutationObserver(() => {\n                const image = photoWidget.querySelector('img');\n                if (!image) return;\n                if (image.getAttribute('src') !== photoUrl || image.hasAttribute('srcset')) {\n                    applyTrainerPhoto();\n                }\n            });\n\n            photoObserver.observe(photoWidget, {\n                childList: true,\n                subtree: true,\n                attributes: true,\n                attributeFilter: ['src', 'srcset', 'data-src', 'data-srcset']\n            });\n        }\n    }\n\n    \/\/ Run immediately\n    updateTrainerWidgets();\n\n    \/\/ Run when the DOM finishes loading\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', updateTrainerWidgets, { once: true });\n    }\n\n    \/\/ Handle Elementor \/ WoodMart late updates\n    window.addEventListener('load', updateTrainerWidgets, { once: true });\n})();\n<\/script>\n\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Portal do Formador Portal dos FormadoresTrainers Portal A preparar a sua \u00e1rea pessoal&#8230;Preparing your personal area&#8230; N\u00ba formador: XXXXXX Ol\u00e1,<\/p>","protected":false},"author":65,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"courseId":0,"footnotes":""},"class_list":["post-92806","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages\/92806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/comments?post=92806"}],"version-history":[{"count":5,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages\/92806\/revisions"}],"predecessor-version":[{"id":93838,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages\/92806\/revisions\/93838"}],"wp:attachment":[{"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/media?parent=92806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}