{"id":92578,"date":"2026-10-12T12:52:47","date_gmt":"2026-10-12T11:52:47","guid":{"rendered":"https:\/\/staging.academiaclinicadragao.com\/?page_id=92578"},"modified":"2026-10-29T09:50:52","modified_gmt":"2026-10-29T09:50:52","slug":"avisos","status":"publish","type":"page","link":"https:\/\/staging.academiaclinicadragao.com\/en\/portal-dos-estudantes\/avisos\/","title":{"rendered":"Notices"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"92578\" class=\"elementor elementor-92578\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4b265c7 elementor-section-boxed elementor-section-height-default elementor-section-height-default wd-section-disabled\" data-id=\"4b265c7\" 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-b1a17a6\" data-id=\"b1a17a6\" 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-1a689cf elementor-widget elementor-widget-shortcode\" data-id=\"1a689cf\" 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=\"student-notices-widget notices-full-page notranslate\" translate=\"no\" data-no-translation>\n  <header class=\"notices-header\">\n    <div class=\"notices-header-left\">\n      <span class=\"notices-header-icon\" aria-hidden=\"true\"><i class=\"icon icon-megaphone\"><\/i><\/span>\n      <div class=\"notices-heading-text\">\n        <h2><span class=\"student-notices-pt\">Avisos<\/span><span class=\"student-notices-en\">Notices<\/span><\/h2>\n        <p><span class=\"student-notices-pt\">Informa\u00e7\u00f5es e comunicados<\/span><span class=\"student-notices-en\">Information and announcements<\/span><\/p>\n      <\/div>\n    <\/div>\n  <\/header>\n  <div class=\"notices-list\" aria-live=\"polite\"><\/div>\n\n<!-- Dataverse notices: data source for JavaScript -->\n<div class=\"notices-dataverse-source\" hidden>\n\n    \n        \n        \n        \n            \n            \n            <div\n                class=\"notice-dataverse-record\"\n\n                data-id=\"4c0d7787-efc6-f111-a05c-7ced8d5f6c91\"\n\n                data-title=\"Novos&#x20;recursos&#x20;dispon&#x00ED;veis\"\n\n                data-title-en=\"New&#x20;features&#x20;available\"\n\n                data-description=\"Novo&#x20;material&#x20;na&#x20;p&#x00E1;gina&#x20;do&#x20;curso&#x20;de&#x20;Running&#x20;e&#x20;Trail&#x20;running\"\n\n                data-description-en=\"New&#x20;content&#x20;on&#x20;the&#x20;Running&#x20;and&#x20;Trail&#x20;Running&#x20;course&#x20;page\"\n\n                data-created=\"2026-10-13T10&#x3A;19&#x3A;16Z\"\n\n                data-start=\"2026-10-12T08&#x3A;00&#x3A;00Z\"\n\n                data-end=\"2026-11-27T08&#x3A;00&#x3A;00Z\"\n\n                data-priority=\"low\">\n            <\/div>\n\n        \n    \n        \n        \n        \n            \n                                        \n            <div\n                class=\"notice-dataverse-record\"\n\n                data-id=\"e4572a5f-efc6-f111-a05c-7ced8d5f6c91\"\n\n                data-title=\"Altera&#x00E7;&#x00E3;o&#x20;de&#x20;hor&#x00E1;rio\"\n\n                data-title-en=\"Schedule&#x20;Change\"\n\n                data-description=\"Foram&#x20;feitas&#x20;altera&#x00E7;&#x00F5;es&#x20;no&#x20;curso&#x20;Y&#x20;por&#x20;&#x28;docente&#x29;\"\n\n                data-description-en=\"Changes&#x20;were&#x20;made&#x20;to&#x20;Course&#x20;Y&#x20;by&#x20;&#x28;instructor&#x29;\"\n\n                data-created=\"2026-10-13T10&#x3A;18&#x3A;09Z\"\n\n                data-start=\"2026-10-12T08&#x3A;00&#x3A;00Z\"\n\n                data-end=\"2026-11-27T08&#x3A;00&#x3A;00Z\"\n\n                data-priority=\"medium\">\n            <\/div>\n\n        \n    \n        \n        \n        \n            \n                                        \n            <div\n                class=\"notice-dataverse-record\"\n\n                data-id=\"6d2f2334-efc6-f111-a05c-7ced8d5f6c91\"\n\n                data-title=\"Calend&#x00E1;rio&#x20;de&#x20;avalia&#x00E7;&#x00F5;es\"\n\n                data-title-en=\"Assessment&#x20;Schedule\"\n\n                data-description=\"O&#x20;teste&#x20;de&#x20;avalia&#x00E7;&#x00E3;o&#x20;do&#x20;curso&#x20;X&#x20;est&#x00E1;&#x20;dispon&#x00ED;vel&#x20;at&#x00E9;&#x20;&#x28;hora&#x20;e&#x20;data&#x29;\"\n\n                data-description-en=\"The&#x20;assessment&#x20;test&#x20;for&#x20;Course&#x20;X&#x20;is&#x20;available&#x20;until&#x20;&#x28;date&#x20;and&#x20;time&#x29;\"\n\n                data-created=\"2026-10-13T10&#x3A;16&#x3A;51Z\"\n\n                data-start=\"2026-10-13T08&#x3A;00&#x3A;00Z\"\n\n                data-end=\"2026-11-27T08&#x3A;00&#x3A;00Z\"\n\n                data-priority=\"high\">\n            <\/div>\n\n        \n    \n<\/div>\n<\/div>\n\n<style>\n\/* Deterministic PT\/EN text: hide the other language before rendering. *\/\n.student-notices-widget.notices-full-page .student-notices-en {display:none!important}\nhtml.student-notices-language-en .student-notices-widget.notices-full-page .student-notices-pt {display:none!important}\nhtml.student-notices-language-en .student-notices-widget.notices-full-page .student-notices-en {display:inline!important}\n\n\/* Full-page Avisos: original layout, using the same records as the homepage *\/\n.student-notices-widget.notices-full-page {\n  --notice-blue: #1559e8;\n  --notice-text: #2269f0;\n  width: 100% !important;\n  max-width: none !important;\n  min-height: 60vh;\n  height: auto !important;\n  display: block !important;\n  padding: clamp(20px, 3vw, 40px) !important;\n  box-sizing: border-box;\n  background: #fff;\n  border-radius: 18px;\n  box-shadow: 0 4px 20px rgba(20,80,150,.07);\n  font-family: inherit;\n}\n.notices-full-page *, .notices-full-page *::before,\n.notices-full-page *::after { box-sizing: border-box; }\n.notices-full-page .notices-header {\n  display: flex; align-items: center; justify-content: space-between;\n  gap: 16px; margin: 0 0 26px !important;\n}\n.notices-full-page .notices-header-left {\n  display: flex; align-items: center; gap: 16px; min-width: 0;\n}\n.notices-full-page .notices-header-icon {\n  display: inline-flex; align-items: center; justify-content: center;\n  flex: 0 0 44px; width: 44px; height: 44px;\n  color: #1760e8 !important;\n}\n.notices-full-page .notices-header-icon i {\n  font-size: 40px !important; line-height: 1 !important; color: inherit !important;\n}\n.notices-full-page .notices-header h2 {\n  margin: 0 !important; padding: 0 !important;\n  color: #1459e8 !important; font-size: clamp(28px, 2.5vw, 36px) !important;\n  font-weight: 750 !important; line-height: 1.15 !important;\n  text-transform: none !important; letter-spacing: normal !important;\n}\n.notices-full-page .notices-heading-text p {\n  color: #2269f0 !important; font-size: 16px !important;\n  line-height: 1.4 !important; margin: 6px 0 0 !important;\n}\n\/* One column on smaller screens, two on wide screens; natural page scroll *\/\n.notices-full-page .notices-list {\n  display: grid !important;\n  grid-template-columns: minmax(0,1fr);\n  gap: 16px !important;\n  align-content: start;\n  width: 100%; min-height: 0; max-height: none !important;\n  height: auto !important;\n  overflow: visible !important;\n}\n@media (min-width: 1100px) {\n  .notices-full-page .notices-list {\n    grid-template-columns: repeat(2,minmax(0,1fr));\n    gap: 18px !important;\n  }\n}\n.notices-full-page .notice-item {\n  display: flex; align-items: center; gap: 16px;\n  min-width: 0; min-height: 112px;\n  margin: 0 !important; padding: 18px 20px;\n  border: 1.5px solid #bfdcff; border-radius: 15px;\n  background: #fff;\n}\n.notices-full-page .notice-alert-icon {\n  display: inline-flex; align-items: center; justify-content: center;\n  flex: 0 0 44px; width: 44px; height: 44px;\n  border-radius: 50%; color: #fff !important;\n  font-size: 29px; font-weight: 800; line-height: 1;\n  box-shadow: 0 2px 7px rgba(0,0,0,.12);\n}\n.notices-full-page .notice-alert-icon.high { background: #ed2029; }\n.notices-full-page .notice-alert-icon.medium { background: #ff792e; }\n.notices-full-page .notice-alert-icon.low { background: #0bb569; }\n.notices-full-page .notice-content { flex: 1 1 auto; min-width: 0; }\n.notices-full-page .notice-title {\n  color: var(--notice-blue) !important;\n  margin: 0 !important; padding: 0 !important;\n  font-size: 16px !important; font-weight: 700 !important;\n  line-height: 1.3 !important;\n  text-transform: none !important; letter-spacing: normal !important;\n}\n.notices-full-page .notice-description {\n  color: var(--notice-text) !important;\n  margin: 5px 0 0 !important; padding: 0 !important;\n  font-size: 15px !important; font-weight: 400 !important;\n  line-height: 1.45 !important; text-transform: none !important;\n  white-space: pre-line;\n  overflow-wrap: anywhere;\n}\n.notices-full-page .notice-date {\n  flex: 0 0 auto; align-self: center;\n  margin: 0 0 0 8px !important;\n  color: var(--notice-text) !important;\n  font-size: 14px !important; font-weight: 400 !important;\n  line-height: 1.35 !important; white-space: nowrap; text-align: right;\n}\n.notices-full-page .notices-empty {\n  grid-column: 1 \/ -1; padding: 30px 12px;\n  text-align: center; color: #6782a5; font-size: 15px;\n}\n\/* Ensure the hidden Twig data source never participates in the layout *\/\n.notices-full-page .notices-dataverse-source[hidden] { display: none !important; }\n@media (max-width: 720px) {\n  .student-notices-widget.notices-full-page { padding: 18px !important; }\n  .notices-full-page .notice-item { padding: 14px; gap: 12px; min-height: 96px; }\n  .notices-full-page .notice-alert-icon {\n    width: 36px; height: 36px; flex-basis: 36px; font-size: 24px;\n  }\n  .notices-full-page .notice-title { font-size: 15px !important; }\n  .notices-full-page .notice-description { font-size: 14px !important; }\n  .notices-full-page .notice-date { font-size: 12px !important; }\n}\n@media (max-width: 460px) {\n  .notices-full-page .notice-item {\n    display: grid; grid-template-columns: 36px minmax(0,1fr);\n    align-items: start;\n  }\n  .notices-full-page .notice-date {\n    grid-column: 2; margin: 0 !important; justify-self: start;\n    text-align: left;\n  }\n  .notices-full-page .notices-heading-text p { font-size: 14px !important; }\n}\n<\/style>\n\n<script>\n(function(){\n  if (\/^\\\/en(?:\\\/|$)\/i.test(window.location.pathname)) {\n    document.documentElement.classList.add('student-notices-language-en');\n  } else {\n    document.documentElement.classList.remove('student-notices-language-en');\n  }\n})();\n<\/script>\n<script>\n(function () {\n\n    const widget = document.querySelector(\n        \".student-notices-widget.notices-full-page\"\n    );\n\n    if (!widget) return;\n\n    const isEnglish = \/^\\\/en(?:\\\/|$)\/i.test(window.location.pathname);\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.titleEn : record.dataset.title) || \"\",\n        description: (isEnglish && record.dataset.descriptionEn?.trim() ? record.dataset.descriptionEn : 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 = {\n            high: isEnglish ? \"High\" : \"Alta\",\n            medium: isEnglish ? \"Medium\" : \"M\u00e9dia\",\n            low: isEnglish ? \"Low\" : \"Baixa\"\n        };\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<\/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":"","protected":false},"author":65,"featured_media":0,"parent":91529,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"courseId":0,"footnotes":""},"class_list":["post-92578","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages\/92578","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=92578"}],"version-history":[{"count":5,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages\/92578\/revisions"}],"predecessor-version":[{"id":93894,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages\/92578\/revisions\/93894"}],"up":[{"embeddable":true,"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/pages\/91529"}],"wp:attachment":[{"href":"https:\/\/staging.academiaclinicadragao.com\/en\/wp-json\/wp\/v2\/media?parent=92578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}