{"id":4585,"date":"2026-04-29T10:59:09","date_gmt":"2026-04-29T10:59:09","guid":{"rendered":"https:\/\/www.gitpico.pt\/?page_id=4585"},"modified":"2026-05-28T10:00:03","modified_gmt":"2026-05-28T10:00:03","slug":"projetos","status":"publish","type":"page","link":"https:\/\/www.gitpico.pt\/en\/projetos\/","title":{"rendered":"Projects"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4585\" class=\"elementor elementor-4585\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-30a58c6 e-con-full slider e-flex e-con e-parent\" data-id=\"30a58c6\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-1234536 e-con-full e-flex e-con e-child\" data-id=\"1234536\" data-element_type=\"container\" data-e-type=\"container\" id=\"projetos\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-eb63abc e-con-full as-slider e-flex e-con e-child\" data-id=\"eb63abc\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-8e95c09 e-con-full e-flex e-con e-child\" data-id=\"8e95c09\" data-element_type=\"container\" data-e-type=\"container\" id=\"as-right-container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4e02e7f elementor-widget elementor-widget-html\" data-id=\"4e02e7f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n.lb-overlay {\r\n    display: none;\r\n    position: fixed;\r\n    top: 0; left: 0;\r\n    width: 100vw; height: 100vh;\r\n    background: rgba(0,0,0,0.95);\r\n    z-index: 999999;\r\n    opacity: 0;\r\n    transition: opacity 0.3s ease;\r\n}\r\n.lb-overlay.open {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n}\r\n.lb-overlay.visible { opacity: 1; }\r\n.lb-inner {\r\n    display: flex;\r\n    width: 90vw;\r\n    max-width: 1200px;\r\n    height: 85vh;\r\n    gap: 40px;\r\n    position: relative;\r\n}\r\n.lb-close {\r\n    position: fixed;\r\n    top: 50px; right: 20px;\r\n    color: #fff;\r\n    font-size: 3rem;\r\n    cursor: pointer;\r\n    line-height: 1;\r\n    opacity: 0.7;\r\n    transition: opacity 0.2s;\r\n    z-index: 999999;\r\n}\r\n.lb-close:hover { opacity: 1; }\r\n.lb-left {\r\n    flex: 1.4;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 12px;\r\n    min-width: 0;\r\n    position: relative;\r\n}\r\n.lb-main-img {\r\n    flex: 1;\r\n    overflow: hidden;\r\n    border-radius: 6px;\r\n    min-height: 0;\r\n}\r\n.lb-main-img img {\r\n    width: 100%; height: 100%;\r\n    object-fit: cover;\r\n    border-radius: 6px;\r\n    transition: opacity 0.3s ease;\r\n}\r\n.lb-thumbs {\r\n    display: flex;\r\n    gap: 8px;\r\n    overflow-x: auto;\r\n    padding-bottom: 4px;\r\n    flex-shrink: 0;\r\n}\r\n.lb-thumbs::-webkit-scrollbar { height: 4px; }\r\n.lb-thumbs::-webkit-scrollbar-track { background: #222; }\r\n.lb-thumbs::-webkit-scrollbar-thumb { background: #555; border-radius: 2px; }\r\n.lb-thumb {\r\n    width: 70px; height: 50px;\r\n    flex-shrink: 0;\r\n    border-radius: 4px;\r\n    overflow: hidden;\r\n    cursor: pointer;\r\n    opacity: 0.5;\r\n    transition: opacity 0.2s;\r\n    border: 2px solid transparent;\r\n}\r\n.lb-thumb:hover { opacity: 0.8; }\r\n.lb-thumb.active { opacity: 1; border-color: #fff; }\r\n.lb-thumb img { width: 100%; height: 100%; object-fit: cover; }\r\n.lb-right {\r\n    flex: 0.6;\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: center;\r\n    color: #fff;\r\n    min-width: 0;\r\n}\r\n.lb-titulo {\r\n    font-size: clamp(1.6rem, 3vw, 2.4rem);\r\n    font-weight: 700;\r\n    margin-bottom: 20px;\r\n    line-height: 1.1;\r\n    text-transform: uppercase;\r\n    letter-spacing: -0.5px;\r\n}\r\n.lb-descricao {\r\n    font-size: 0.95rem;\r\n    line-height: 1.8;\r\n    color: #bbb;\r\n}\r\n.lb-prev, .lb-next {\r\n    position: absolute;\r\n    top: 50%;\r\n    transform: translateY(-50%);\r\n    background: rgba(255,255,255,0.15);\r\n    color: #fff;\r\n    width: 40px; height: 40px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    border-radius: 50%;\r\n    cursor: pointer;\r\n    font-size: 1rem;\r\n    transition: background 0.2s;\r\n    z-index: 5;\r\n}\r\n.lb-prev:hover, .lb-next:hover { background: rgba(255,255,255,0.35); }\r\n.lb-prev { left: 10px; }\r\n.lb-next { right: 10px; }\r\n.lb-next-projeto {\r\n    margin-top: 40px;\r\n    color: #fff;\r\n    font-size: 0.8rem;\r\n    letter-spacing: 2px;\r\n    text-transform: uppercase;\r\n    cursor: pointer;\r\n    opacity: 0.6;\r\n    transition: opacity 0.2s;\r\n    border-top: 1px solid rgba(255,255,255,0.2);\r\n    padding-top: 20px;\r\n}\r\n.lb-next-projeto:hover { opacity: 1; }\r\n@media (max-width: 768px) {\r\n    .lb-inner { flex-direction: column; height: 92vh; gap: 16px; width: 95vw; }\r\n    .lb-left { flex: 1; }\r\n    .lb-right { flex: 0 0 auto; justify-content: flex-start; }\r\n    .lb-titulo { font-size: 1.4rem; margin-bottom: 10px; }\r\n    .lb-descricao { font-size: 0.85rem; }\r\n}\r\n.swiper-slide .ver-projeto {\r\n    position: absolute;\r\n    inset: 0;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    background: rgba(0,0,0,0.4);\r\n    color: #fff;\r\n    font-size: 0.9rem;\r\n    letter-spacing: 2px;\r\n    text-transform: uppercase;\r\n    opacity: 0;\r\n    transition: opacity 0.3s ease;\r\n    z-index: 3;\r\n    cursor: pointer;\r\n}\r\n.swiper-slide:hover .ver-projeto { opacity: 1; }\r\n<\/style>\r\n\r\n<div class=\"lb-overlay\" id=\"lb-overlay\">\r\n    <span class=\"lb-close\" id=\"lb-close\">&times;<\/span>\r\n    <div class=\"lb-inner\">\r\n        <div class=\"lb-left\">\r\n            <div class=\"lb-main-img\">\r\n                <img decoding=\"async\" id=\"lb-img\" src=\"\" alt=\"\">\r\n            <\/div>\r\n            <div class=\"lb-prev\">&#8592;<\/div>\r\n            <div class=\"lb-next\">&#8594;<\/div>\r\n            <div class=\"lb-thumbs\" id=\"lb-thumbs\"><\/div>\r\n        <\/div>\r\n        <div class=\"lb-right\">\r\n            <div class=\"lb-titulo\" id=\"lb-titulo\"><\/div>\r\n            <div class=\"lb-descricao\" id=\"lb-descricao\"><\/div>\r\n            <div class=\"lb-next-projeto\" id=\"lb-next-projeto\"><\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script>\r\nvar $ = jQuery\r\nvar swiperInstance = null;\r\nvar slidesInjetados = false;\r\n\r\nvar lbCurrentImg = 0;\r\nvar lbGaleria = [];\r\n\r\nfunction abrirLightbox(projetoIndex) {\r\n    var projeto = window.projetosImages[projetoIndex];\r\n    if (!projeto) return;\r\n\r\n    lbGaleria = projeto.galeria && projeto.galeria.length ? projeto.galeria : [projeto.url];\r\n    lbCurrentImg = 0;\r\n\r\n    $('#lb-titulo').text(projeto.nome);\r\n    $('#lb-descricao').text(projeto.descricao || '');\r\n    $('#lb-img').attr('src', lbGaleria[0]);\r\n\r\n    var nextIndex = (projetoIndex + 1) % window.projetosImages.length;\r\n    var nextNome = window.projetosImages[nextIndex].nome;\r\n    $('#lb-next-projeto').text('Pr\u00f3ximo Projeto \u2192 ' + nextNome).off('click').on('click', function() {\r\n        abrirLightbox(nextIndex);\r\n    });\r\n\r\n    var thumbsHtml = '';\r\n    lbGaleria.forEach(function(url, i) {\r\n        thumbsHtml += '<div class=\"lb-thumb' + (i === 0 ? ' active' : '') + '\" data-index=\"' + i + '\">'\r\n            + '<img decoding=\"async\" src=\"' + url + '\">'\r\n            + '<\/div>';\r\n    });\r\n    $('#lb-thumbs').html(thumbsHtml);\r\n\r\n    $('body').append($('#lb-overlay'));\r\n    var $overlay = $('#lb-overlay');\r\n    $overlay.addClass('open');\r\n    setTimeout(function() { $overlay.addClass('visible'); }, 10);\r\n    $('body').css('overflow', 'hidden');\r\n}\r\n\r\nfunction fecharLightbox() {\r\n    var $overlay = $('#lb-overlay');\r\n    $overlay.removeClass('visible');\r\n    setTimeout(function() { $overlay.removeClass('open'); }, 300);\r\n    $('body').css('overflow', '');\r\n}\r\n\r\nfunction mudarImagem(index) {\r\n    if (index < 0) index = lbGaleria.length - 1;\r\n    if (index >= lbGaleria.length) index = 0;\r\n    lbCurrentImg = index;\r\n    var $img = $('#lb-img');\r\n    $img.css('opacity', 0);\r\n    setTimeout(function() {\r\n        $img.attr('src', lbGaleria[index]);\r\n        $img.css('opacity', 1);\r\n    }, 300);\r\n    $('#lb-thumbs .lb-thumb').removeClass('active').eq(index).addClass('active');\r\n}\r\n\r\n$(document).on('click', '#lb-close', fecharLightbox);\r\n$(document).on('click', '#lb-overlay', function(e) {\r\n    if ($(e.target).is('#lb-overlay')) fecharLightbox();\r\n});\r\n$(document).on('click', '.lb-thumb', function() { mudarImagem($(this).data('index')); });\r\n$(document).on('click', '.lb-prev', function(e) { e.stopPropagation(); mudarImagem(lbCurrentImg - 1); });\r\n$(document).on('click', '.lb-next', function(e) { e.stopPropagation(); mudarImagem(lbCurrentImg + 1); });\r\n$(document).on('keydown', function(e) {\r\n    if (!$('#lb-overlay').hasClass('open')) return;\r\n    if (e.key === 'Escape') fecharLightbox();\r\n    if (e.key === 'ArrowLeft') mudarImagem(lbCurrentImg - 1);\r\n    if (e.key === 'ArrowRight') mudarImagem(lbCurrentImg + 1);\r\n});\r\n\r\n$(document).ready(function(){\r\n\r\n$('.as-slider').each(function(){\r\n\r\nvar $this = $(this),\r\n    currentSlide = 0,\r\n    previousSlide = 0,\r\n    slideNumber = 0,\r\n    barHTML = '',\r\n    forward,\r\n    textContainer = $this.find('.as-changing-widget')\r\n\r\nslideNumber = window.projetosImages ? window.projetosImages.length : $this.find('.as-side-slider .swiper-slide:not(.swiper-slide-duplicate)').length\r\n\r\nfunction ajustarLarguraSlides() {\r\n    if (!swiperInstance) return;\r\n    var $swiperEl = $this.find('.as-side-slider .elementor-main-swiper, .as-side-slider .swiper-container')\r\n    if (!$swiperEl.length) return;\r\n    if (window.innerWidth <= 767) return;\r\n\r\n    var containerWidth = $swiperEl[0].offsetWidth;\r\n    var spaceBetween = 20;\r\n    var largura = Math.floor((containerWidth - spaceBetween) \/ 2);\r\n\r\n    $swiperEl.find('.swiper-slide').each(function() {\r\n        $(this).css('width', largura + 'px');\r\n    });\r\n\r\n    swiperInstance.update();\r\n}\r\n\r\nfunction injetarSlides() {\r\n    if (slidesInjetados) return;\r\n    if (typeof window.projetosSlides === 'undefined') return;\r\n\r\n    var $swiperEl = $this.find('.as-side-slider .elementor-main-swiper, .as-side-slider .swiper-container')\r\n    if (!$swiperEl.length) return;\r\n\r\n    if ($swiperEl[0].swiper) {\r\n        $swiperEl[0].swiper.destroy(true, true)\r\n    }\r\n\r\n    $swiperEl.find('.swiper-wrapper').empty().html(window.projetosSlides)\r\n    $swiperEl.find('.swiper-slide').removeAttr('style')\r\n\r\n    swiperInstance = new Swiper($swiperEl[0], {\r\n        loop: true,\r\n        loopAdditionalSlides: 4,\r\n        loopedSlides: window.projetosImages.length * 2,\r\n        initialSlide: 0,\r\n        speed: 500,\r\n        grabCursor: true,\r\n        slideToClickedSlide: true,\r\n        slidesPerView: 'auto',\r\n        spaceBetween: 20,\r\n        on: {\r\n            slideChange: function() {\r\n                currentSlide = this.realIndex;\r\n            },\r\n            click: function() {\r\n                var swiper = this;\r\n                if (swiper.clickedIndex === undefined) return;\r\n                var $clicked = $(swiper.clickedSlide);\r\n                var realIdx = parseInt($clicked.attr('data-swiper-slide-index'));\r\n                if (isNaN(realIdx)) realIdx = swiper.realIndex;\r\n                abrirLightbox(realIdx);\r\n            },\r\n            init: function() {\r\n                setTimeout(ajustarLarguraSlides, 50);\r\n            }\r\n        }\r\n    })\r\n\r\n    setTimeout(function() {\r\n        swiperInstance.slideToLoop(0, 0);\r\n    }, 50);\r\n\r\n    $swiperEl[0].swiper = swiperInstance\r\n    slidesInjetados = true\r\n\r\n    setTimeout(function(){\r\n        swiperInstance.update()\r\n        ajustarLarguraSlides()\r\n    }, 200)\r\n}\r\n\r\n$(window).on('load', function(){ injetarSlides() })\r\n\r\n$(document).on('elementor\/frontend\/init', function(){\r\n    setTimeout(injetarSlides, 100)\r\n})\r\n\r\nvar tentativas = 0\r\nvar esperar = setInterval(function(){\r\n    if (slidesInjetados) { clearInterval(esperar); return; }\r\n    injetarSlides()\r\n    tentativas++\r\n    if (tentativas > 75) clearInterval(esperar)\r\n}, 200)\r\n\r\n$(window).on('resize', function(){\r\n    ajustarLarguraSlides()\r\n})\r\n\r\nfor(var i=0; i<slideNumber;i++){\r\n    barHTML += '<span class=\"dot\"><span class=\"dot-number\">'+(i+1)+'<\/span><\/span>'\r\n}\r\n$this.find('.as-bar .dot').remove()\r\n$this.find('.as-bar').append(barHTML)\r\n$this.find('.as-bar .dot').eq(0).addClass('active')\r\n\r\ntextContainer.each(function(){\r\n    var texts = $(this).find('.elementor-widget').eq(0)\r\n    texts.addClass('currentUp')\r\n    $(this).css('--h', texts.height()+'px')\r\n})\r\n\r\nsetTimeout(function(){\r\n    $this.addClass('loaded')\r\n    if($this.find('.as-side-slider .swiper-container-initialized, .as-side-slider .swiper-initialized').length){\r\n        $this.find('.as-side-slider').addClass('loaded')\r\n    }\r\n    var init = setInterval(function(){\r\n        if($this.find('.as-side-slider .swiper-container-initialized, .as-side-slider .swiper-initialized').length){\r\n            $this.find('.as-side-slider').addClass('loaded')\r\n            clearInterval(init)\r\n        }\r\n    },50)\r\n}, 500)\r\n\r\nsetInterval(function(){\r\n    var $swiperEl = $this.find('.as-side-slider .elementor-main-swiper, .as-side-slider .swiper-container')\r\n    var swiper = $swiperEl[0] ? $swiperEl[0].swiper : null\r\n    if (!swiper) return\r\n\r\n    var activeSlide = swiper.realIndex\r\n    currentSlide = activeSlide\r\n\r\n    if(previousSlide != currentSlide) {\r\n        if( previousSlide < currentSlide ) forward = true\r\n        if( previousSlide > currentSlide ) forward = false\r\n        if( previousSlide == slideNumber - 1 && currentSlide == 0 ) forward = true\r\n        if( previousSlide == 0 && currentSlide == slideNumber - 1 ) forward = false\r\n\r\n        textContainer.each(function(){\r\n            var texts = $(this).find('.elementor-widget')\r\n            $(this).css('--h', texts.eq(currentSlide).height()+'px')\r\n            texts.removeClass('prev next currentUp currentDown')\r\n\r\n            if(forward) {\r\n                texts.eq(previousSlide).addClass('prev')\r\n                texts.eq(currentSlide).addClass('currentUp')\r\n            }else{\r\n                texts.eq(previousSlide).addClass('next')\r\n                texts.eq(currentSlide).addClass('currentDown')\r\n            }\r\n        })\r\n\r\n        $this.find('.as-bar .dot').removeClass('active')\r\n        $this.find('.as-bar .dot').eq(currentSlide).addClass('active')\r\n    }\r\n    previousSlide = currentSlide\r\n}, 500)\r\n\r\n$this.find('.as-bar .dot').on('click', function(){\r\n    var index = $(this).index()\r\n    var $swiperEl = $this.find('.as-side-slider .elementor-main-swiper, .as-side-slider .swiper-container')\r\n    var swiper = $swiperEl[0] ? $swiperEl[0].swiper : null\r\n    if(swiper) swiper.slideToLoop(index)\r\n})\r\n\r\n$this.find('.as-slider-left').on('click', function(e){\r\n    e.stopPropagation()\r\n    var $swiperEl = $this.find('.as-side-slider .elementor-main-swiper, .as-side-slider .swiper-container')\r\n    var swiper = $swiperEl[0] ? $swiperEl[0].swiper : null\r\n    if(swiper) swiper.slidePrev()\r\n})\r\n\r\n$this.find('.as-slider-right').on('click', function(e){\r\n    e.stopPropagation()\r\n    var $swiperEl = $this.find('.as-side-slider .elementor-main-swiper, .as-side-slider .swiper-container')\r\n    var swiper = $swiperEl[0] ? $swiperEl[0].swiper : null\r\n    if(swiper) swiper.slideNext()\r\n})\r\n\r\n$this.find('.as-slider-left a, .as-slider-right a').on('click', function(e){ e.preventDefault() })\r\n\r\n})\r\n})\r\n\r\n$(window).on('resize', function(){\r\n    $('.as-slider').each(function(){\r\n        var textContainer = $(this).find('.as-changing-widget')\r\n        textContainer.each(function(){\r\n            var texts = $(this).find('.elementor-widget.currentUp, .elementor-widget.currentDown')\r\n            $(this).css('--h', texts.height()+'px')\r\n        })\r\n    })\r\n})\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e699b6b as-side-slider elementor-testimonial--skin-default elementor-testimonial--layout-image_inline elementor-testimonial--align-center elementor-arrows-yes elementor-pagination-type-bullets elementor-widget elementor-widget-testimonial-carousel\" data-id=\"e699b6b\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"as-carousel-widget\" data-settings=\"{&quot;slides_per_view&quot;:&quot;5&quot;,&quot;space_between&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:30,&quot;sizes&quot;:[]},&quot;show_arrows&quot;:&quot;yes&quot;,&quot;pagination&quot;:&quot;bullets&quot;,&quot;speed&quot;:500,&quot;loop&quot;:&quot;yes&quot;,&quot;space_between_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;space_between_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]}}\" data-widget_type=\"testimonial-carousel.default\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-main-swiper swiper\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Slides\">\n\t\t\t\t<div class=\"swiper-wrapper\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-testimonial\">\n\t\t\t\t\t\t<div class=\"elementor-testimonial__footer\">\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7732c59 e-con-full as-bar e-flex e-con e-child\" data-id=\"7732c59\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>&times; &#8592; &#8594;<\/p>","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-4585","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.gitpico.pt\/en\/wp-json\/wp\/v2\/pages\/4585","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gitpico.pt\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gitpico.pt\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gitpico.pt\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gitpico.pt\/en\/wp-json\/wp\/v2\/comments?post=4585"}],"version-history":[{"count":80,"href":"https:\/\/www.gitpico.pt\/en\/wp-json\/wp\/v2\/pages\/4585\/revisions"}],"predecessor-version":[{"id":4698,"href":"https:\/\/www.gitpico.pt\/en\/wp-json\/wp\/v2\/pages\/4585\/revisions\/4698"}],"wp:attachment":[{"href":"https:\/\/www.gitpico.pt\/en\/wp-json\/wp\/v2\/media?parent=4585"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}