{"id":347,"date":"2025-09-24T14:21:21","date_gmt":"2025-09-24T13:21:21","guid":{"rendered":"https:\/\/aliancapioneer.iscte-iul.pt\/?page_id=347"},"modified":"2025-10-03T17:26:24","modified_gmt":"2025-10-03T16:26:24","slug":"agenda-pt","status":"publish","type":"page","link":"https:\/\/aliancapioneer.iscte-iul.pt\/index.php\/pt\/agenda-pt\/","title":{"rendered":"Agenda"},"content":{"rendered":"<style>\r\n.events-calendar-wrapper{max-width:1200px;margin:40px auto;padding:20px}\r\n.calendar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px;padding:20px;background:#f8f9fa;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,.1);gap:20px}\r\n.calendar-selectors{display:flex;gap:15px;align-items:center;flex:1;justify-content:center}\r\n.month-selector,.year-selector{padding:10px 15px;font-size:16px;font-weight:600;border:2px solid #0073aa;border-radius:6px;background:#fff;color:#333;cursor:pointer;min-width:140px}\r\n.calendar-nav{padding:10px;background:#0073aa;color:#fff;border:none;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;min-width:50px;height:50px}\r\n.calendar-nav:hover{background:#005a87;transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,115,170,.3)}\r\n.month-calendar-container{background:#fff;border:1px solid #ddd;border-radius:8px;padding:30px;box-shadow:0 2px 8px rgba(0,0,0,.1)}\r\n.month-title{text-align:center;font-size:28px;font-weight:700;color:#333;margin:0 0 25px;padding-bottom:15px;border-bottom:3px solid #0073aa}\r\n.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}\r\n.calendar-day-name{text-align:center;font-weight:700;color:#666;font-size:14px;padding:12px 0;text-transform:uppercase;background:#f8f9fa;border-radius:4px}\r\n.calendar-day{min-height:80px;padding:8px;border:2px solid #e0e0e0;border-radius:6px;background:#fff;cursor:pointer;display:flex;flex-direction:column}\r\n.calendar-day:hover:not(.empty):not(.past){background:#f0f7ff;border-color:#0073aa;transform:translateY(-3px);box-shadow:0 4px 12px rgba(0,115,170,.2)}\r\n.calendar-day.empty{background:#fafafa;cursor:default;border-color:transparent}\r\n.calendar-day.past{background:#f5f5f5;opacity:.5;cursor:default}\r\n.calendar-day.today{background:#fff3cd;border-color:#ffc107;border-width:3px}\r\n.calendar-day.has-events{background:#e3f2fd;border-color:#2196f3}\r\n.calendar-day.has-events:hover:not(.past){background:#bbdefb;border-color:#1976d2}\r\n.day-number{display:block;text-align:center;font-size:16px;font-weight:700;color:#333;margin-bottom:5px}\r\n.day-events{display:flex;flex-wrap:wrap;gap:3px;justify-content:center;flex:1}\r\n.event-dot{width:8px;height:8px;border-radius:50%;cursor:pointer;transition:transform .2s}\r\n.event-dot:hover{transform:scale(1.3)}\r\n.event-modal{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10000;opacity:0;visibility:hidden;transition:opacity .3s,visibility .3s}\r\n.event-modal.show{opacity:1;visibility:visible}\r\n.event-modal-backdrop{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7);backdrop-filter:blur(3px)}\r\n.event-modal-content{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(.9);background:#fff;border-radius:12px;box-shadow:0 20px 60px rgba(0,0,0,.3);width:85vw;max-width:1100px;max-height:90vh;overflow-y:auto;padding:40px;transition:transform .3s}\r\n.event-modal.show .event-modal-content{transform:translate(-50%,-50%) scale(1)}\r\n.event-modal-close{position:absolute;top:15px;right:20px;background:0 0;border:none;font-size:30px;cursor:pointer;color:#999;width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:50%;z-index:10}\r\n.event-modal-close:hover{background:#f0f0f0;color:#333}\r\n.event-item{display:flex;gap:30px;padding:20px 0;border-bottom:1px solid #eee}\r\n.event-item:last-child{border-bottom:none}\r\n.event-info{flex:1}\r\n.event-title{font-size:24px;font-weight:700;margin:0 0 10px;color:#333}\r\n.event-datetime{display:flex;align-items:center;gap:5px;font-size:16px;font-weight:600;color:#0073aa;margin:0 0 8px}\r\n.event-location{display:flex;align-items:center;gap:5px;font-size:14px;color:#666;margin:0 0 15px}\r\n.event-description{margin-bottom:15px;line-height:1.6;color:#555}\r\n.event-link{display:inline-flex;align-items:center;gap:8px;padding:10px 20px;background:#0073aa;color:#fff;text-decoration:none;border-radius:6px;font-size:14px;font-weight:600}\r\n.event-link:hover{background:#005a87;transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,115,170,.3)}\r\n.event-image{flex-shrink:0;max-width:300px;width:100%}\r\n.event-image img{width:100%;height:auto;max-height:300px;object-fit:cover;border-radius:8px}\r\n.no-image{width:100%;max-width:300px;height:200px;background:#f0f0f0;border:2px dashed #ccc;border-radius:8px;display:flex;align-items:center;justify-content:center;color:#666;font-style:italic}\r\n@media (max-width:1024px){.event-modal-content{width:75vw}}\r\n@media (max-width:900px){.event-item{flex-direction:column}.event-image{max-width:100%}}\r\n@media (max-width:768px){\r\n.events-calendar-wrapper{margin:20px auto;padding:10px}\r\n.calendar-header{flex-wrap:wrap;padding:15px;gap:10px}\r\n.calendar-selectors{order:3;width:100%;gap:10px}\r\n.month-selector,.year-selector{min-width:0;flex:1;padding:8px 10px;font-size:14px}\r\n.calendar-nav{min-width:45px;height:45px}\r\n.month-calendar-container{padding:15px;overflow-x:auto}\r\n.month-title{font-size:22px;margin:0 0 15px}\r\n.calendar-grid{gap:4px}\r\n.calendar-day{min-height:60px;padding:4px;font-size:14px}\r\n.calendar-day-name{font-size:12px;padding:8px 0}\r\n.day-number{font-size:14px;margin-bottom:3px}\r\n.event-dot{width:6px;height:6px}\r\n.event-modal-content{width:95vw;padding:20px;margin:10px}\r\n.event-title{font-size:20px}\r\n.event-datetime{font-size:14px}\r\n}\r\n@media (max-width:480px){\r\n.events-calendar-wrapper{padding:5px;margin:10px auto}\r\n.calendar-header{padding:10px}\r\n.month-calendar-container{padding:10px}\r\n.calendar-grid{gap:2px}\r\n.calendar-day{min-height:50px;padding:2px}\r\n.day-number{font-size:12px}\r\n.event-dot{width:5px;height:5px}\r\n}\r\n<\/style>\r\n\r\n<div class=\"events-calendar-wrapper\">\r\n    <div class=\"calendar-header\">\r\n        <button class=\"calendar-nav prev-month\"><span class=\"material-icons\">chevron_left<\/span><\/button>\r\n        <div class=\"calendar-selectors\">\r\n            <select class=\"month-selector\">\r\n                                <option value=\"1\" >January<\/option>\r\n                                <option value=\"2\" >February<\/option>\r\n                                <option value=\"3\" >March<\/option>\r\n                                <option value=\"4\" >April<\/option>\r\n                                <option value=\"5\"  selected='selected'>May<\/option>\r\n                                <option value=\"6\" >June<\/option>\r\n                                <option value=\"7\" >July<\/option>\r\n                                <option value=\"8\" >August<\/option>\r\n                                <option value=\"9\" >September<\/option>\r\n                                <option value=\"10\" >October<\/option>\r\n                                <option value=\"11\" >November<\/option>\r\n                                <option value=\"12\" >December<\/option>\r\n                            <\/select>\r\n            <select class=\"year-selector\">\r\n                                <option value=\"2024\" >2024<\/option>\r\n                                <option value=\"2025\" >2025<\/option>\r\n                                <option value=\"2026\"  selected='selected'>2026<\/option>\r\n                                <option value=\"2027\" >2027<\/option>\r\n                                <option value=\"2028\" >2028<\/option>\r\n                                <option value=\"2029\" >2029<\/option>\r\n                                <option value=\"2030\" >2030<\/option>\r\n                                <option value=\"2031\" >2031<\/option>\r\n                            <\/select>\r\n        <\/div>\r\n        <button class=\"calendar-nav next-month\"><span class=\"material-icons\">chevron_right<\/span><\/button>\r\n    <\/div>\r\n    <div class=\"month-calendar-container\" data-year=\"2026\" data-month=\"5\"><\/div>\r\n<\/div>\r\n\r\n<div class=\"event-modal\">\r\n    <div class=\"event-modal-backdrop\"><\/div>\r\n    <div class=\"event-modal-content\">\r\n        <button class=\"event-modal-close\">&times;<\/button>\r\n        <div class=\"event-details-container\"><\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script>\r\njQuery(function($){\r\nvar EC={\r\n    y:2026,\r\n    m:5,\r\n    restUrl:'https:\/\/aliancapioneer.iscte-iul.pt\/index.php\/wp-json\/events-calendar\/v1\/events',\r\n    lang:'',\r\n    events:[],\r\n    \r\n    init:function(){\r\n        var self=this;\r\n        $('.month-selector').on('change',function(){self.m=parseInt($(this).val());self.y=parseInt($('.year-selector').val());self.update()});\r\n        $('.year-selector').on('change',function(){self.y=parseInt($(this).val());self.m=parseInt($('.month-selector').val());self.update()});\r\n        $('.prev-month').on('click',function(){self.m--;if(self.m<1){self.m=12;self.y--;}$('.month-selector').val(self.m);$('.year-selector').val(self.y);self.update()});\r\n        $('.next-month').on('click',function(){self.m++;if(self.m>12){self.m=1;self.y++;}$('.month-selector').val(self.m);$('.year-selector').val(self.y);self.update()});\r\n        $(document).on('click','.calendar-day.has-events',function(){self.openModal($(this).data('date'))});\r\n        $('.event-modal-close,.event-modal-backdrop').on('click',function(){$('.event-modal').removeClass('show')});\r\n        this.update();\r\n    },\r\n    \r\n    update:function(){\r\n        this.renderCalendar(this.y,this.m);\r\n        this.loadEvents(this.y,this.m);\r\n    },\r\n    \r\n    loadEvents:function(y,m){\r\n        var self=this;\r\n        var params={year:y,month:m};\r\n        if(this.lang){params.lang=this.lang;}\r\n        $.get(this.restUrl,params,function(r){\r\n            if(r.events){self.events=r.events;self.markEvents();}\r\n        }).fail(function(xhr,status,error){\r\n            console.warn('Events Calendar: Failed to load events',status,error);\r\n        });\r\n    },\r\n    \r\n    renderCalendar:function(y,m){\r\n        var mn=['January','February','March','April','May','June','July','August','September','October','November','December'];\r\n        var dim=new Date(y,m,0).getDate();\r\n        var fd=new Date(y,m-1,1).getDay();\r\n        var td=new Date();\r\n        var ts=td.getFullYear()+'-'+('0'+(td.getMonth()+1)).slice(-2)+'-'+('0'+td.getDate()).slice(-2);\r\n        var h='<div class=\"month-container\"><h3 class=\"month-title\">'+mn[m-1]+' '+y+'<\/h3><div class=\"calendar-grid\">';\r\n        h+='<div class=\"calendar-day-name\">Sun<\/div><div class=\"calendar-day-name\">Mon<\/div><div class=\"calendar-day-name\">Tue<\/div><div class=\"calendar-day-name\">Wed<\/div><div class=\"calendar-day-name\">Thu<\/div><div class=\"calendar-day-name\">Fri<\/div><div class=\"calendar-day-name\">Sat<\/div>';\r\n        for(var i=0;i<fd;i++)h+='<div class=\"calendar-day empty\"><\/div>';\r\n        for(var d=1;d<=dim;d++){\r\n            var ds=y+'-'+('0'+m).slice(-2)+'-'+('0'+d).slice(-2);\r\n            var cl='calendar-day';\r\n            if(ds===ts)cl+=' today';\r\n            if(ds<ts)cl+=' past';\r\n            h+='<div class=\"'+cl+'\" data-date=\"'+ds+'\"><span class=\"day-number\">'+d+'<\/span><div class=\"day-events\"><\/div><\/div>';\r\n        }\r\n        h+='<\/div><\/div>';\r\n        $('.month-calendar-container').html(h);\r\n    },\r\n    \r\n    markEvents:function(){\r\n        $('.calendar-day').removeClass('has-events');\r\n        $('.day-events').empty();\r\n        for(var i=0;i<this.events.length;i++){\r\n            var e=this.events[i];\r\n            var sp=e.start_date.split('-');\r\n            var ep=e.end_date.split('-');\r\n            var sd=new Date(sp[0],sp[1]-1,sp[2]);\r\n            var ed=new Date(ep[0],ep[1]-1,ep[2]);\r\n            var cd=new Date(sd);\r\n            while(cd<=ed){\r\n                var ds=cd.getFullYear()+'-'+('0'+(cd.getMonth()+1)).slice(-2)+'-'+('0'+cd.getDate()).slice(-2);\r\n                var day=$('.calendar-day[data-date=\"'+ds+'\"]');\r\n                if(day.length){\r\n                    day.addClass('has-events');\r\n                    var color=e.color?e.color:'#0073aa';\r\n                    var title=e.title?e.title:'Event';\r\n                    day.find('.day-events').append('<span class=\"event-dot\" style=\"background-color:'+color+'\" title=\"'+this.escapeHtml(title)+'\"><\/span>');\r\n                }\r\n                cd.setDate(cd.getDate()+1);\r\n            }\r\n        }\r\n    },\r\n    \r\n    openModal:function(dt){\r\n        var dayEvents=[];\r\n        for(var i=0;i<this.events.length;i++){\r\n            if(dt>=this.events[i].start_date&&dt<=this.events[i].end_date){\r\n                dayEvents.push(this.events[i]);\r\n            }\r\n        }\r\n        if(dayEvents.length===0)return;\r\n        \r\n        var html='';\r\n        for(var j=0;j<dayEvents.length;j++){\r\n            var evt=dayEvents[j];\r\n            \r\n            var evTitle=evt.title?evt.title:'Untitled';\r\n            var evDesc=evt.description?evt.description:'';\r\n            var evImg=evt.image?evt.image:'';\r\n            var evLoc=evt.location?evt.location:'';\r\n            var evUrl=evt.know_more_url?evt.know_more_url:'';\r\n            var evStartDate=evt.start_date?evt.start_date:'';\r\n            var evEndDate=evt.end_date?evt.end_date:'';\r\n            var evStartTime=evt.start_time?evt.start_time:'';\r\n            var evEndTime=evt.end_time?evt.end_time:'';\r\n            \r\n            var startDateFmt=this.formatDate(evStartDate);\r\n            var endDateFmt=this.formatDate(evEndDate);\r\n            var dateDisplay=startDateFmt===endDateFmt?startDateFmt:startDateFmt+' - '+endDateFmt;\r\n            \r\n            var hasTimes=false;\r\n            if(evStartTime){hasTimes=true;}\r\n            if(evEndTime){hasTimes=true;}\r\n            \r\n            if(hasTimes){\r\n                dateDisplay=dateDisplay+'<br>';\r\n                if(evStartTime){dateDisplay=dateDisplay+this.formatTime(evStartTime);}\r\n                if(evStartTime&&evEndTime){dateDisplay=dateDisplay+' - ';}\r\n                if(evEndTime){dateDisplay=dateDisplay+this.formatTime(evEndTime);}\r\n            }\r\n            \r\n            var locationHtml='';\r\n            if(evLoc){locationHtml='<p class=\"event-location\"><span class=\"material-icons\">place<\/span>'+this.escapeHtml(evLoc)+'<\/p>';}\r\n            \r\n            var buttonHtml='';\r\n            if(evUrl){buttonHtml='<a href=\"'+this.escapeHtml(evUrl)+'\" class=\"event-link\" target=\"_blank\" rel=\"noopener\"><span class=\"material-icons\">open_in_new<\/span>Know More<\/a>';}\r\n            \r\n            var imageHtml='';\r\n            if(evImg){imageHtml='<img decoding=\"async\" src=\"'+this.escapeHtml(evImg)+'\" alt=\"Event\">';}else{imageHtml='<div class=\"no-image\">No Image<\/div>';}\r\n            \r\n            html=html+'<div class=\"event-item\">';\r\n            html=html+'<div class=\"event-info\">';\r\n            html=html+'<h3 class=\"event-title\">'+this.escapeHtml(evTitle)+'<\/h3>';\r\n            html=html+'<p class=\"event-datetime\"><span class=\"material-icons\">event<\/span>'+dateDisplay+'<\/p>';\r\n            html=html+locationHtml;\r\n            html=html+'<div class=\"event-description\">'+evDesc+'<\/div>';\r\n            html=html+buttonHtml;\r\n            html=html+'<\/div>';\r\n            html=html+'<div class=\"event-image\">'+imageHtml+'<\/div>';\r\n            html=html+'<\/div>';\r\n        }\r\n        \r\n        $('.event-details-container').html(html);\r\n        $('.event-modal').addClass('show');\r\n    },\r\n    \r\n    formatDate:function(d){\r\n        if(!d)return '';\r\n        var p=d.split('-');\r\n        var dt=new Date(p[0],p[1]-1,p[2]);\r\n        return dt.toLocaleDateString('en-US',{year:'numeric',month:'long',day:'numeric'});\r\n    },\r\n    \r\n    formatTime:function(t){\r\n        if(!t)return '';\r\n        var p=t.split(':');\r\n        var h=parseInt(p[0]);\r\n        var ap=h>=12?'PM':'AM';\r\n        h=h%12||12;\r\n        return h+':'+p[1]+' '+ap;\r\n    },\r\n    \r\n    escapeHtml:function(s){\r\n        if(!s)return '';\r\n        return String(s).replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;').replace(\/\"\/g,'&quot;').replace(\/'\/g,'&#39;');\r\n    }\r\n};\r\nEC.init();\r\n});\r\n<\/script>\r\n        \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page_fullwidth.php","meta":{"footnotes":""},"class_list":["post-347","page","type-page","status-publish","hentry"],"featured_image_src":null,"_links":{"self":[{"href":"https:\/\/aliancapioneer.iscte-iul.pt\/index.php\/wp-json\/wp\/v2\/pages\/347","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aliancapioneer.iscte-iul.pt\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aliancapioneer.iscte-iul.pt\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aliancapioneer.iscte-iul.pt\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aliancapioneer.iscte-iul.pt\/index.php\/wp-json\/wp\/v2\/comments?post=347"}],"version-history":[{"count":5,"href":"https:\/\/aliancapioneer.iscte-iul.pt\/index.php\/wp-json\/wp\/v2\/pages\/347\/revisions"}],"predecessor-version":[{"id":502,"href":"https:\/\/aliancapioneer.iscte-iul.pt\/index.php\/wp-json\/wp\/v2\/pages\/347\/revisions\/502"}],"wp:attachment":[{"href":"https:\/\/aliancapioneer.iscte-iul.pt\/index.php\/wp-json\/wp\/v2\/media?parent=347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}