{"id":6913,"date":"2026-06-16T15:45:16","date_gmt":"2026-06-16T15:45:16","guid":{"rendered":"https:\/\/3solutions.pt\/?page_id=6913"},"modified":"2026-07-21T21:19:25","modified_gmt":"2026-07-21T21:19:25","slug":"jobmaps-candidaturas-oferta","status":"publish","type":"page","link":"https:\/\/3solutions.pt\/en\/jobmaps-candidaturas-oferta\/","title":{"rendered":"WIW Candidaturas oferta"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"6913\" class=\"elementor elementor-6913\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1cf2351 e-flex e-con-boxed e-con e-parent\" data-id=\"1cf2351\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c22cdaa elementor-widget elementor-widget-html\" data-id=\"c22cdaa\" 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        <header class=\"jm-site-header\" data-wiw-header>\r\n          <div class=\"jm-site-header-inner\">\r\n\r\n            <a href=\"https:\/\/3solutions.pt\/en\/jobmaps-o-mapa-do-trabalho-local\/\"\r\n               class=\"jm-site-brand\"\r\n               aria-label=\"Ir para o mapa WIW\">\r\n              <span class=\"jm-site-logo\">\r\n                <img decoding=\"async\" src=\"https:\/\/3solutions.pt\/wp-content\/uploads\/2026\/06\/WIW.png\"\r\n                     alt=\"WIW \u2014 Work is Worth\">\r\n              <\/span>\r\n              <span class=\"jm-site-tagline\">O mapa de ofertas salariais na sua zona<\/span>\r\n            <\/a>\r\n\r\n            <nav class=\"jm-site-nav\" aria-label=\"Menu WIW\">\r\n\r\n              <a id=\"jm-link-contratar\"\r\n                 href=\"https:\/\/3solutions.pt\/en\/jobmaps-login\/\"\r\n                 class=\"jm-site-nav-link jm-primary-link\">\r\n                Quero contratar\r\n              <\/a>\r\n\r\n              <a id=\"jm-link-publicar\"\r\n                 href=\"https:\/\/3solutions.pt\/en\/planos-para-empresas-wiw\/\"\r\n                 class=\"jm-site-nav-link\"\r\n                 style=\"display:none;\">\r\n                Publicar oferta\r\n              <\/a>\r\n\r\n              <a id=\"jm-link-trabalhar\"\r\n                 href=\"https:\/\/3solutions.pt\/en\/jobmaps-login-candidato\/\"\r\n                 class=\"jm-site-nav-link\">\r\n                Quero trabalhar\r\n              <\/a>\r\n\r\n              <a id=\"jm-link-recrutador\"\r\n                 href=\"https:\/\/3solutions.pt\/en\/wiw-recrutadores\/\"\r\n                 class=\"jm-site-nav-link\">\r\n                Sou recrutador\r\n              <\/a>\r\n\r\n              <a id=\"jm-link-legal\"\r\n                 href=\"https:\/\/3solutions.pt\/en\/legal-wiw\/\"\r\n                 class=\"jm-site-nav-link jm-legal-link\">\r\n                Privacidade e Termos\r\n              <\/a>\r\n\r\n              <a id=\"jm-user-pill\"\r\n                 href=\"#\"\r\n                 class=\"jm-user-pill\"\r\n                 style=\"display:none;\">\r\n                <span class=\"jm-user-icon\" aria-hidden=\"true\">\ud83d\udc64<\/span>\r\n                <span id=\"jm-user-name\">Conta WIW<\/span>\r\n              <\/a>\r\n\r\n              <a id=\"jm-logout-link\"\r\n                 href=\"#\"\r\n                 class=\"jm-logout-link\"\r\n                 style=\"display:none;\">\r\n                Sair\r\n              <\/a>\r\n\r\n            <\/nav>\r\n\r\n          <\/div>\r\n        <\/header>\r\n\r\n        <script>\r\n        (function() {\r\n          function initWiwHeader() {\r\n            const header = document.querySelector(\"[data-wiw-header]\");\r\n            if (!header || header.dataset.ready === \"1\") return;\r\n\r\n            header.dataset.ready = \"1\";\r\n\r\n            const contratarLink = header.querySelector(\"#jm-link-contratar\");\r\n            const publicarLink = header.querySelector(\"#jm-link-publicar\");\r\n            const trabalharLink = header.querySelector(\"#jm-link-trabalhar\");\r\n            const recrutadorLink = header.querySelector(\"#jm-link-recrutador\");\r\n            const legalLink = header.querySelector(\"#jm-link-legal\");\r\n            const userPill = header.querySelector(\"#jm-user-pill\");\r\n            const userName = header.querySelector(\"#jm-user-name\");\r\n            const logoutLink = header.querySelector(\"#jm-logout-link\");\r\n\r\n            const urlsDefault = {\r\n              mapa: \"https:\/\/3solutions.pt\/en\/jobmaps-o-mapa-do-trabalho-local\/\",\r\n              loginEmpresa: \"https:\/\/3solutions.pt\/en\/jobmaps-login\/\",\r\n              areaEmpresa: \"https:\/\/3solutions.pt\/en\/jobmaps-area-empresa\/\",\r\n              planosEmpresa: \"https:\/\/3solutions.pt\/en\/planos-para-empresas-wiw\/\",\r\n              candidatos: \"https:\/\/3solutions.pt\/en\/jobmaps-candidatos\/\",\r\n              registoCandidato: \"https:\/\/3solutions.pt\/en\/jobmaps-registo-candidato\/\",\r\n              loginCandidato: \"https:\/\/3solutions.pt\/en\/jobmaps-login-candidato\/\",\r\n              areaCandidato: \"https:\/\/3solutions.pt\/en\/jobmaps-area-candidato\/\",\r\n              recrutador: \"https:\/\/3solutions.pt\/en\/wiw-recrutadores\/\",\r\n              areaRecrutador: \"https:\/\/3solutions.pt\/en\/jobmaps-area-recrutador\/\",\r\n              legal: \"https:\/\/3solutions.pt\/en\/legal-wiw\/\",\r\n              logoutAjax: \"https:\/\/3solutions.pt\/wp-admin\/admin-ajax.php\",\r\n              logoutRedirect: \"https:\/\/3solutions.pt\/en\/jobmaps-o-mapa-do-trabalho-local\/\" \r\n            };\r\n\r\n            function setHref(el, href) {\r\n              if (el && href) el.href = href;\r\n            }\r\n\r\n            function setText(el, text) {\r\n              if (el) el.textContent = text || \"\";\r\n            }\r\n\r\n            function show(el, displayValue) {\r\n              if (el) el.style.display = displayValue || \"inline-flex\";\r\n            }\r\n\r\n            function hide(el) {\r\n              if (el) el.style.display = \"none\";\r\n            }\r\n\r\n            function resetClasses() {\r\n              [contratarLink, publicarLink, trabalharLink, recrutadorLink, legalLink].forEach(function(link) {\r\n                if (!link) return;\r\n                link.classList.remove(\"jm-primary-link\", \"jm-logged-link\");\r\n              });\r\n            }\r\n\r\n            function resetVisibility() {\r\n              show(contratarLink);\r\n              hide(publicarLink);\r\n              show(trabalharLink);\r\n              show(recrutadorLink);\r\n              show(legalLink);\r\n              hide(userPill);\r\n              hide(logoutLink);\r\n            }\r\n\r\n            function applyCommonUrls(data) {\r\n              const urls = data && data.urls ? data.urls : {};\r\n\r\n              setHref(contratarLink, urls.login_empresa || urlsDefault.loginEmpresa);\r\n              setHref(publicarLink, urls.planos_empresa || urlsDefault.planosEmpresa);\r\n              setHref(trabalharLink, urls.login_candidato || urlsDefault.loginCandidato);\r\n              setHref(recrutadorLink, urls.recrutador || urlsDefault.recrutador);\r\n              setHref(legalLink, urls.legal || urlsDefault.legal);\r\n            }\r\n\r\n            function applyAccount(data, name, areaUrl) {\r\n              if (userPill && userName) {\r\n                setText(userName, name || \"Conta WIW\");\r\n                setHref(userPill, areaUrl);\r\n                show(userPill);\r\n              }\r\n\r\n              if (logoutLink) {\r\n                setHref(logoutLink, \"#\");\r\n                show(logoutLink);\r\n              }\r\n            }\r\n\r\n            function bindLogout() {\r\n              if (!logoutLink || logoutLink.dataset.bound === \"1\") {\r\n                return;\r\n              }\r\n\r\n              logoutLink.dataset.bound = \"1\";\r\n\r\n              logoutLink.addEventListener(\"click\", function(event) {\r\n                event.preventDefault();\r\n\r\n                if (logoutLink.dataset.loading === \"1\") {\r\n                  return;\r\n                }\r\n\r\n                logoutLink.dataset.loading = \"1\";\r\n                logoutLink.textContent = \"A sair...\";\r\n\r\n                const body = new URLSearchParams();\r\n                body.append(\"action\", \"wiw_logout_now\");\r\n\r\n                fetch(urlsDefault.logoutAjax, {\r\n                  method: \"POST\",\r\n                  credentials: \"same-origin\",\r\n                  cache: \"no-store\",\r\n                  headers: {\r\n                    \"Content-Type\": \"application\/x-www-form-urlencoded; charset=UTF-8\"\r\n                  },\r\n                  body: body.toString()\r\n                })\r\n                  .then(function(response) {\r\n                    return response.json();\r\n                  })\r\n                  .then(function(data) {\r\n                    const redirect =\r\n                      data &&\r\n                      data.success &&\r\n                      data.data &&\r\n                      data.data.redirect\r\n                        ? data.data.redirect\r\n                        : urlsDefault.logoutRedirect;\r\n\r\n                    window.location.replace(redirect);\r\n                  })\r\n                  .catch(function() {\r\n                    window.location.replace(urlsDefault.logoutRedirect);\r\n                  });\r\n              });\r\n            }\r\n\r\n            function applyCurrentPageHighlight() {\r\n              const path = String(window.location.pathname || \"\").toLowerCase();\r\n\r\n              [contratarLink, publicarLink, trabalharLink, recrutadorLink, legalLink].forEach(function(link) {\r\n                if (!link) return;\r\n                link.classList.remove(\"jm-primary-link\");\r\n              });\r\n\r\n              const isLegal =\r\n                path.includes(\"\/legal-wiw\") ||\r\n                path.includes(\"\/politica-de-privacidade\") ||\r\n                path.includes(\"\/termos-e-condicoes\") ||\r\n                path.includes(\"\/termos\");\r\n\r\n              const isRecruiter =\r\n                path.includes(\"\/wiw-recrutadores\") ||\r\n                path.includes(\"\/jobmaps-area-recrutador\") ||\r\n                path.includes(\"\/jobmaps-login-recrutador\") ||\r\n                path.includes(\"\/jobmaps-registo-recrutador\");\r\n\r\n              const isCandidate =\r\n                path.includes(\"\/jobmaps-candidatos\") ||\r\n                path.includes(\"\/jobmaps-registo-candidato\") ||\r\n                path.includes(\"\/jobmaps-login-candidato\") ||\r\n                path.includes(\"\/jobmaps-area-candidato\") ||\r\n                path.includes(\"\/jobmaps-candidatar-oferta\");\r\n\r\n              const isCompanyPublishing =\r\n                path.includes(\"\/planos-para-empresas-wiw\") ||\r\n                path.includes(\"\/jobmaps-publicar-oferta\");\r\n\r\n              const isCompanyArea =\r\n                path.includes(\"\/jobmaps-login\") ||\r\n                path.includes(\"\/jobmaps-registo-empresa\") ||\r\n                path.includes(\"\/jobmaps-area-empresa\") ||\r\n                path.includes(\"\/jobmaps-minhas-ofertas\") ||\r\n                path.includes(\"\/jobmaps-editar-oferta\") ||\r\n                path.includes(\"\/jobmaps-candidaturas-oferta\") ||\r\n                path.includes(\"\/jobmaps-ofertas-entidade\");\r\n\r\n              if (isLegal && legalLink && legalLink.style.display !== \"none\") {\r\n                legalLink.classList.add(\"jm-primary-link\");\r\n                return;\r\n              }\r\n\r\n              if (isRecruiter && recrutadorLink && recrutadorLink.style.display !== \"none\") {\r\n                recrutadorLink.classList.add(\"jm-primary-link\");\r\n                return;\r\n              }\r\n\r\n              if (isCandidate && trabalharLink && trabalharLink.style.display !== \"none\") {\r\n                trabalharLink.classList.add(\"jm-primary-link\");\r\n                return;\r\n              }\r\n\r\n              if (isCompanyPublishing) {\r\n                if (publicarLink && publicarLink.style.display !== \"none\") {\r\n                  publicarLink.classList.add(\"jm-primary-link\");\r\n                  return;\r\n                }\r\n\r\n                if (contratarLink && contratarLink.style.display !== \"none\") {\r\n                  contratarLink.classList.add(\"jm-primary-link\");\r\n                  return;\r\n                }\r\n              }\r\n\r\n              if (isCompanyArea && contratarLink && contratarLink.style.display !== \"none\") {\r\n                contratarLink.classList.add(\"jm-primary-link\");\r\n              }\r\n            }\r\n\r\n            function estadoNaoLogado(data) {\r\n              resetClasses();\r\n              resetVisibility();\r\n              applyCommonUrls(data || {});\r\n\r\n              setText(contratarLink, \"Quero contratar\");\r\n              setText(trabalharLink, \"Quero trabalhar\");\r\n              setText(recrutadorLink, \"Sou recrutador\");\r\n              setText(legalLink, \"Privacidade e Termos\");\r\n\r\n              applyCurrentPageHighlight();\r\n            }\r\n\r\n            function estadoEmpresaLogada(data) {\r\n              resetClasses();\r\n              resetVisibility();\r\n              applyCommonUrls(data);\r\n\r\n              setHref(contratarLink, data.area_url || urlsDefault.areaEmpresa);\r\n              setText(contratarLink, \"\u00c1rea da empresa\");\r\n\r\n              setHref(publicarLink, data.publicar_url || urlsDefault.planosEmpresa);\r\n              setText(publicarLink, \"Publicar oferta\");\r\n              publicarLink.classList.add(\"jm-primary-link\");\r\n              show(publicarLink);\r\n\r\n              hide(trabalharLink);\r\n\r\n              setText(recrutadorLink, \"Sou recrutador\");\r\n              setText(legalLink, \"Privacidade e Termos\");\r\n\r\n              applyAccount(\r\n                data,\r\n                data.empresa_titulo || data.display_name || \"Empresa\",\r\n                data.area_url || urlsDefault.areaEmpresa\r\n              );\r\n\r\n              applyCurrentPageHighlight();\r\n            }\r\n\r\n            function estadoCandidatoLogado(data) {\r\n              resetClasses();\r\n              resetVisibility();\r\n              applyCommonUrls(data);\r\n\r\n              hide(contratarLink);\r\n              hide(publicarLink);\r\n\r\n              setHref(trabalharLink, data.area_url || urlsDefault.areaCandidato);\r\n              setText(trabalharLink, \"\u00c1rea do candidato\");\r\n\r\n              setText(recrutadorLink, \"Sou recrutador\");\r\n              setText(legalLink, \"Privacidade e Termos\");\r\n\r\n              applyAccount(\r\n                data,\r\n                data.candidato_nome || data.display_name || \"Candidato\",\r\n                data.area_url || urlsDefault.areaCandidato\r\n              );\r\n\r\n              applyCurrentPageHighlight();\r\n            }\r\n\r\n            function estadoRecrutadorLogado(data) {\r\n              resetClasses();\r\n              resetVisibility();\r\n              applyCommonUrls(data);\r\n\r\n              setHref(contratarLink, data.empresa_login_url || urlsDefault.loginEmpresa);\r\n              setText(contratarLink, \"Quero contratar\");\r\n\r\n              hide(publicarLink);\r\n              hide(trabalharLink);\r\n\r\n              setHref(recrutadorLink, data.area_url || urlsDefault.areaRecrutador);\r\n              setText(recrutadorLink, \"\u00c1rea do recrutador\");\r\n\r\n              setText(legalLink, \"Privacidade e Termos\");\r\n\r\n              applyAccount(\r\n                data,\r\n                data.recrutador_nome || data.display_name || \"Recrutador\",\r\n                data.area_url || urlsDefault.areaRecrutador\r\n              );\r\n\r\n              applyCurrentPageHighlight();\r\n            }\r\n\r\n            bindLogout();\r\n\r\n            fetch(\"https:\/\/3solutions.pt\/wp-admin\/admin-ajax.php?action=jm5_header_me&t=\" + Date.now(), {\r\n              method: \"GET\",\r\n              credentials: \"same-origin\",\r\n              cache: \"no-store\"\r\n            })\r\n              .then(function(response) {\r\n                return response.json();\r\n              })\r\n              .then(function(data) {\r\n                if (!data || !data.logged_in) {\r\n                  estadoNaoLogado(data || {});\r\n                  return;\r\n                }\r\n\r\n                if (data.is_empresa) {\r\n                  estadoEmpresaLogada(data);\r\n                  return;\r\n                }\r\n\r\n                if (data.is_candidato) {\r\n                  estadoCandidatoLogado(data);\r\n                  return;\r\n                }\r\n\r\n                if (data.is_recrutador) {\r\n                  estadoRecrutadorLogado(data);\r\n                  return;\r\n                }\r\n\r\n                estadoNaoLogado(data);\r\n              })\r\n              .catch(function() {\r\n                estadoNaoLogado({});\r\n              });\r\n          }\r\n\r\n          if (document.readyState === \"loading\") {\r\n            document.addEventListener(\"DOMContentLoaded\", initWiwHeader);\r\n          } else {\r\n            initWiwHeader();\r\n          }\r\n        })();\r\n        <\/script>\r\n\r\n        <style>\r\n        .jm-site-header {\r\n          width: 100%;\r\n          padding: 0;\r\n          background: #ffffff;\r\n          box-sizing: border-box;\r\n          font-family: inherit;\r\n          position: relative;\r\n          z-index: 20;\r\n          border-bottom: 1px solid #e8ebf0;\r\n        }\r\n\r\n        .jm-site-header *,\r\n        .jm-site-header *::before,\r\n        .jm-site-header *::after {\r\n          box-sizing: border-box;\r\n        }\r\n\r\n        .jm-site-header-inner {\r\n          width: 100%;\r\n          margin: 0 auto;\r\n          padding: 4px 24px;\r\n          min-height: 66px;\r\n          background: #ffffff;\r\n          display: flex;\r\n          align-items: center;\r\n          justify-content: space-between;\r\n          gap: 18px;\r\n          overflow: visible;\r\n          position: relative;\r\n        }\r\n\r\n        .jm-site-brand {\r\n          display: inline-flex;\r\n          flex-direction: column;\r\n          align-items: flex-start;\r\n          justify-content: center;\r\n          text-decoration: none;\r\n          flex-shrink: 0;\r\n          min-width: 250px;\r\n          overflow: visible;\r\n        }\r\n\r\n        .jm-site-logo {\r\n          height: 52px;\r\n          display: inline-flex;\r\n          align-items: center;\r\n          justify-content: flex-start;\r\n          overflow: visible;\r\n        }\r\n\r\n        .jm-site-logo img {\r\n          height: 150px;\r\n          width: auto;\r\n          max-width: 285px;\r\n          display: block;\r\n          transform: scale(1.16);\r\n          transform-origin: left center;\r\n        }\r\n\r\n        .jm-site-tagline {\r\n          margin-top: -9px;\r\n          padding-left: 6px;\r\n          color: #587092;\r\n          font-size: 12px;\r\n          font-weight: 750;\r\n          line-height: 1.2;\r\n          letter-spacing: -0.1px;\r\n          white-space: nowrap;\r\n        }\r\n\r\n        .jm-site-nav {\r\n          display: flex;\r\n          align-items: center;\r\n          justify-content: flex-end;\r\n          gap: 16px;\r\n          flex-wrap: nowrap;\r\n        }\r\n\r\n        .jm-site-nav-link {\r\n          position: relative;\r\n          display: inline-flex;\r\n          align-items: center;\r\n          justify-content: center;\r\n          padding: 8px 0;\r\n          text-align: center;\r\n          text-decoration: none;\r\n          font-size: 12px;\r\n          font-weight: 650;\r\n          line-height: 1;\r\n          color: #405066;\r\n          background: transparent;\r\n          border: 0;\r\n          box-shadow: none;\r\n          transition: color 0.15s ease, opacity 0.15s ease;\r\n          white-space: nowrap;\r\n          opacity: 0.86;\r\n        }\r\n\r\n        .jm-site-nav-link::after {\r\n          content: \"\";\r\n          position: absolute;\r\n          left: 0;\r\n          right: 0;\r\n          bottom: -5px;\r\n          height: 2px;\r\n          border-radius: 999px;\r\n          background: #1556ff;\r\n          transform: scaleX(0);\r\n          transform-origin: center;\r\n          transition: transform 0.15s ease;\r\n        }\r\n\r\n        .jm-site-nav-link:hover {\r\n          color: #1556ff;\r\n          opacity: 1;\r\n        }\r\n\r\n        .jm-site-nav-link:hover::after {\r\n          transform: scaleX(1);\r\n        }\r\n\r\n        .jm-primary-link {\r\n          color: #1556ff;\r\n          font-weight: 750;\r\n          opacity: 0.95;\r\n        }\r\n\r\n        .jm-logged-link {\r\n          color: #15396f;\r\n          font-weight: 750;\r\n          opacity: 0.95;\r\n        }\r\n\r\n        .jm-legal-link {\r\n          color: #6b7d96;\r\n          font-size: 11.5px;\r\n        }\r\n\r\n        .jm-site-nav-link.jm-primary-link,\r\n        .jm-site-nav-link.jm-logged-link.jm-primary-link,\r\n        .jm-legal-link.jm-primary-link {\r\n          color: #1556ff;\r\n          font-weight: 750;\r\n          opacity: 1;\r\n        }\r\n\r\n        .jm-user-pill {\r\n          display: inline-flex;\r\n          align-items: center;\r\n          gap: 5px;\r\n          padding: 0;\r\n          color: #587092;\r\n          text-decoration: none;\r\n          font-size: 11.5px;\r\n          font-weight: 650;\r\n          white-space: nowrap;\r\n          max-width: 155px;\r\n          overflow: hidden;\r\n          text-overflow: ellipsis;\r\n          transition: color 0.15s ease;\r\n        }\r\n\r\n        .jm-user-pill:hover {\r\n          color: #1556ff;\r\n        }\r\n\r\n        .jm-user-icon {\r\n          font-size: 12px;\r\n          line-height: 1;\r\n          flex-shrink: 0;\r\n        }\r\n\r\n        #jm-user-name {\r\n          display: inline-block;\r\n          overflow: hidden;\r\n          text-overflow: ellipsis;\r\n          white-space: nowrap;\r\n        }\r\n\r\n        .jm-logout-link {\r\n          align-items: center;\r\n          justify-content: center;\r\n          color: #7d8da3;\r\n          text-decoration: none;\r\n          font-size: 11.5px;\r\n          font-weight: 750;\r\n          white-space: nowrap;\r\n        }\r\n\r\n        .jm-logout-link:hover {\r\n          color: #1556ff;\r\n        }\r\n\r\n        @media (max-width: 980px) {\r\n          .jm-site-header-inner {\r\n            padding: 5px 16px;\r\n            min-height: 64px;\r\n            gap: 14px;\r\n          }\r\n\r\n          .jm-site-brand {\r\n            min-width: 215px;\r\n          }\r\n\r\n          .jm-site-logo {\r\n            height: 50px;\r\n          }\r\n\r\n          .jm-site-logo img {\r\n            height: 135px;\r\n            max-width: 250px;\r\n            transform: scale(1.13);\r\n          }\r\n\r\n          .jm-site-tagline {\r\n            margin-top: -8px;\r\n            padding-left: 4px;\r\n            font-size: 11.5px;\r\n          }\r\n\r\n          .jm-site-nav {\r\n            gap: 12px;\r\n          }\r\n\r\n          .jm-site-nav-link {\r\n            font-size: 11.2px;\r\n            padding: 7px 0;\r\n          }\r\n\r\n          .jm-legal-link {\r\n            font-size: 10.8px;\r\n          }\r\n\r\n          .jm-user-pill {\r\n            font-size: 11px;\r\n            max-width: 115px;\r\n          }\r\n\r\n          .jm-logout-link {\r\n            font-size: 11px;\r\n          }\r\n        }\r\n\r\n        @media (max-width: 680px) {\r\n          .jm-site-header-inner {\r\n            padding: 8px 12px 13px;\r\n            min-height: auto;\r\n            flex-direction: column;\r\n            align-items: flex-start;\r\n            gap: 0;\r\n          }\r\n\r\n          .jm-site-brand {\r\n            width: 100%;\r\n            min-width: 0;\r\n            align-items: flex-start;\r\n            padding-right: 92px;\r\n          }\r\n\r\n          .jm-site-logo {\r\n            height: 70px;\r\n            width: 100%;\r\n            justify-content: flex-start;\r\n          }\r\n\r\n          .jm-site-logo img {\r\n            height: 156px;\r\n            max-width: 292px;\r\n            transform: scale(1.18);\r\n          }\r\n\r\n          .jm-site-tagline {\r\n            margin-top: -5px;\r\n            padding-left: 3px;\r\n            margin-bottom: 13px;\r\n            font-size: 12px;\r\n            text-align: left;\r\n            white-space: normal;\r\n            max-width: 100%;\r\n            line-height: 1.25;\r\n          }\r\n\r\n          .jm-site-nav {\r\n            width: 100%;\r\n            justify-content: center;\r\n            gap: 10px 14px;\r\n            flex-wrap: wrap;\r\n            padding-top: 6px;\r\n          }\r\n\r\n          .jm-site-nav-link {\r\n            font-size: 12px;\r\n            font-weight: 650;\r\n            padding: 5px 0;\r\n          }\r\n\r\n          .jm-legal-link {\r\n            font-size: 11.5px;\r\n            width: 100%;\r\n            order: 8;\r\n            opacity: 0.74;\r\n          }\r\n\r\n          .jm-site-nav-link::after {\r\n            bottom: -3px;\r\n          }\r\n\r\n          .jm-user-pill {\r\n            position: absolute;\r\n            top: 12px;\r\n            right: 44px;\r\n            font-size: 11px;\r\n            max-width: 92px;\r\n            justify-content: flex-end;\r\n          }\r\n\r\n          .jm-logout-link {\r\n            position: absolute;\r\n            top: 12px;\r\n            right: 12px;\r\n            font-size: 11px;\r\n          }\r\n        }\r\n\r\n        @media (max-width: 420px) {\r\n          .jm-site-header-inner {\r\n            padding: 8px 10px 12px;\r\n          }\r\n\r\n          .jm-site-brand {\r\n            padding-right: 82px;\r\n          }\r\n\r\n          .jm-site-logo {\r\n            height: 64px;\r\n          }\r\n\r\n          .jm-site-logo img {\r\n            height: 138px;\r\n            max-width: 255px;\r\n            transform: scale(1.13);\r\n          }\r\n\r\n          .jm-site-tagline {\r\n            margin-top: -3px;\r\n            margin-bottom: 12px;\r\n            padding-left: 2px;\r\n            font-size: 11.2px;\r\n          }\r\n\r\n          .jm-site-nav {\r\n            gap: 9px 11px;\r\n          }\r\n\r\n          .jm-site-nav-link {\r\n            font-size: 11.4px;\r\n            padding: 4px 0;\r\n          }\r\n\r\n          .jm-user-pill {\r\n            top: 11px;\r\n            right: 42px;\r\n            font-size: 10.5px;\r\n            max-width: 78px;\r\n          }\r\n\r\n          .jm-logout-link {\r\n            top: 11px;\r\n            right: 10px;\r\n            font-size: 10.5px;\r\n          }\r\n        }\r\n        <\/style>\r\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c7a4e7d elementor-widget elementor-widget-html\" data-id=\"c7a4e7d\" 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<section class=\"jm-candidates-offer-page\">\n  <div class=\"jm-candidates-shell\">\n\n    <div class=\"jm-candidates-hero\">\n      <div>\n        <span class=\"jm-candidates-badge\">\u00c1rea da Empresa WIW<\/span>\n        <h1>Candidaturas da oferta<\/h1>\n        <p id=\"jm-offer-subtitle\">\n          Consulte os candidatos desta oportunidade, veja CVs, detalhes da candidatura, contactos e atualize o estado de acompanhamento.\n        <\/p>\n      <\/div>\n\n      <div class=\"jm-hero-actions\">\n  <button type=\"button\" id=\"jm-send-negative-emails\" class=\"jm-email-btn\">\n    Enviar email aos candidatos n\u00e3o selecionados\n  <\/button>\n\n  <a class=\"jm-back-btn\" href=\"\/jobmaps-minhas-ofertas\/\">Voltar \u00e0s minhas ofertas<\/a>\n<\/div>\n    <\/div>\n\n    <div id=\"jm-page-message\" class=\"jm-page-message\">A carregar candidaturas...<\/div>\n\n    <div id=\"jm-candidates-content\" style=\"display:none;\">\n      <div class=\"jm-candidates-toolbar\">\n        <div>\n          <strong id=\"jm-total-label\">0 candidaturas<\/strong>\n          <span id=\"jm-offer-label\"><\/span>\n        <\/div>\n\n        <select id=\"jm-state-filter\">\n          <option value=\"all\">Todos os estados<\/option>\n          <option value=\"novo\">Novo \/ n\u00e3o visto<\/option>\n          <option value=\"visto\">Visto<\/option>\n          <option value=\"adaptavel\">Adapt\u00e1vel<\/option>\n          <option value=\"nao_adaptavel\">N\u00e3o adapt\u00e1vel<\/option>\n          <option value=\"enviado_entrevista\">Enviado para entrevista<\/option>\n          <option value=\"contactado\">Contactado<\/option>\n          <option value=\"entrevista_marcada\">Entrevista marcada<\/option>\n          <option value=\"contratado\">Contratado<\/option>\n          <option value=\"indeferido\">Indeferido<\/option>\n        <\/select>\n      <\/div>\n\n      <div id=\"jm-candidates-list\" class=\"jm-candidates-list\"><\/div>\n    <\/div>\n\n  <\/div>\n\n  <script>\n    function jm4EscapeHtml(value) {\n      return String(value || \"\")\n        .replace(\/&\/g, \"&amp;\")\n        .replace(\/<\/g, \"&lt;\")\n        .replace(\/>\/g, \"&gt;\")\n        .replace(\/\"\/g, \"&quot;\")\n        .replace(\/'\/g, \"&#039;\");\n    }\n\n    function jm4SafeValue(value, fallback) {\n      return value && String(value).trim() !== \"\" ? String(value) : (fallback || \"\u2014\");\n    }\n\n    function jm4StatusClass(estado) {\n      return String(estado || \"novo\").replace(\/[^a-z0-9_]\/g, \"\");\n    }\n\n    function jm4StateOptions(selected) {\n      const estados = [\n        [\"novo\", \"Novo \/ n\u00e3o visto\"],\n        [\"visto\", \"Visto\"],\n        [\"adaptavel\", \"Adapt\u00e1vel\"],\n        [\"nao_adaptavel\", \"N\u00e3o adapt\u00e1vel\"],\n        [\"enviado_entrevista\", \"Enviado para entrevista\"],\n        [\"contactado\", \"Contactado\"],\n        [\"entrevista_marcada\", \"Entrevista marcada\"],\n        [\"contratado\", \"Contratado\"],\n        [\"indeferido\", \"Indeferido\"]\n      ];\n\n      return estados.map(function(item) {\n        return '<option value=\"' + item[0] + '\"' + (item[0] === selected ? \" selected\" : \"\") + '>' + item[1] + '<\/option>';\n      }).join(\"\");\n    }\n\n    function jm4FullItem(label, value) {\n      if (!value || String(value).trim() === \"\") return \"\";\n      return '<div class=\"jm-full-item\"><strong>' + jm4EscapeHtml(label) + '<\/strong><p>' + jm4EscapeHtml(value) + '<\/p><\/div>';\n    }\n\n    function jm4ReferenceLine(label, value) {\n      if (!value || String(value).trim() === \"\") return \"\";\n      return '<div class=\"jm-reference-line\"><strong>' + jm4EscapeHtml(label) + '<\/strong><span>' + jm4EscapeHtml(value) + '<\/span><\/div>';\n    }\n\n    function jm4RenderReferencesStatus(c) {\n      const total = parseInt(c.referencias_total_autorizadas || 0, 10);\n      const candidaturaId = jm4EscapeHtml(c.id);\n\n      return `\n        <div class=\"jm-references-status\">\n          <button type=\"button\"\n                  class=\"jm-references-btn\"\n                  data-open-references-status=\"${candidaturaId}\">\n            Refer\u00eancias profissionais\n          <\/button>\n\n          <div class=\"jm-references-message\"\n               id=\"jm-references-message-${candidaturaId}\">\n          <\/div>\n        <\/div>\n      `;\n    }\n\n    function jm4RenderReferencesBox(c) {\n      const referencias = Array.isArray(c.referencias) ? c.referencias : [];\n      const candidaturaId = jm4EscapeHtml(c.id);\n\n      const cards = referencias.map(function(ref) {\n        const frases = Array.isArray(ref.frases_avaliacao) ? ref.frases_avaliacao : [];\n        const frasesHtml = frases.length\n          ? '<ul class=\"jm-reference-list\">' + frases.map(function(frase) {\n              return '<li>' + jm4EscapeHtml(frase) + '<\/li>';\n            }).join(\"\") + '<\/ul>'\n          : \"\";\n\n        return `\n          <div class=\"jm-reference-card\">\n            ${jm4ReferenceLine(\"Entidade\", ref.entidade)}\n            ${jm4ReferenceLine(\"Respons\u00e1vel\", ref.responsavel)}\n            ${jm4ReferenceLine(\"Cargo\", ref.cargo_responsavel)}\n            ${jm4ReferenceLine(\"Rela\u00e7\u00e3o profissional\", ref.relacao_profissional)}\n            ${frasesHtml ? `<div class=\"jm-reference-block\"><strong>Avalia\u00e7\u00e3o<\/strong>${frasesHtml}<\/div>` : \"\"}\n            ${jm4ReferenceLine(\"Motivo de sa\u00edda\", ref.motivo_saida)}\n            ${jm4ReferenceLine(\"Contexto da sa\u00edda\", ref.motivo_saida_contexto)}\n            ${jm4ReferenceLine(\"Voltaria a contratar\", ref.voltaria_contratar)}\n            ${jm4ReferenceLine(\"Recomenda\u00e7\u00e3o\", ref.recomenda)}\n            ${jm4ReferenceLine(\"Observa\u00e7\u00f5es\", ref.observacoes)}\n          <\/div>\n        `;\n      }).join(\"\");\n\n      return `\n        <div class=\"jm-references-box\"\n             id=\"jm-references-${candidaturaId}\"\n             data-references-state=\"${jm4EscapeHtml(c.referencias_estado || \"sem_referencias\")}\"\n             data-references-total=\"${parseInt(c.referencias_total_autorizadas || 0, 10)}\">\n          ${cards}\n        <\/div>\n      `;\n    }\n\n    function jm4RenderCandidate(c) {\n      const estado = c.estado || \"novo\";\n      const estadoLabel = c.estado_label || \"Novo \/ n\u00e3o visto\";\n      const resumo = c.resumo || c.experiencia_relevante || \"Sem resumo indicado.\";\n      const cvUrl = c.cv_url || \"\";\n      const cvName = c.cv_file_name || \"Ver CV\";\n\n      const hasFull =\n        c.motivacao || c.experiencia_relevante || c.formacao_relevante ||\n        c.disponibilidade_inicio || c.disponibilidade_horaria ||\n        c.carta_conducao || c.transporte_proprio || c.observacoes_candidatura ||\n        c.mensagem || c.cv_url;\n\n      return `\n        <article class=\"jm-candidate-card\" data-candidate-id=\"${jm4EscapeHtml(c.id)}\">\n          <div class=\"jm-candidate-top\">\n            <div>\n              <h2>${jm4EscapeHtml(jm4SafeValue(c.nome, \"Candidato\"))}<\/h2>\n              <span class=\"jm-candidate-offer\">Oferta: ${jm4EscapeHtml(jm4SafeValue(c.oferta_titulo, \"Oferta WIW\"))}<\/span>\n            <\/div>\n            <span class=\"jm-status ${jm4StatusClass(estado)}\">${jm4EscapeHtml(estadoLabel)}<\/span>\n          <\/div>\n\n          <div class=\"jm-candidate-meta\">\n            <div><strong>Data<\/strong><span>${jm4EscapeHtml(jm4SafeValue(c.data, \"\u2014\"))}<\/span><\/div>\n            <div><strong>Localidade<\/strong><span>${jm4EscapeHtml(jm4SafeValue(c.localidade_candidatura || c.localidade, \"\u2014\"))}<\/span><\/div>\n            <div><strong>Dispon\u00edvel<\/strong><span>${jm4EscapeHtml(jm4SafeValue(c.disponibilidade_inicio, \"\u2014\"))}<\/span><\/div>\n            <div><strong>Hor\u00e1rio<\/strong><span>${jm4EscapeHtml(jm4SafeValue(c.disponibilidade_horaria, \"\u2014\"))}<\/span><\/div>\n          <\/div>\n\n          <p class=\"jm-candidate-summary\">${jm4EscapeHtml(resumo)}<\/p>\n\n          <div class=\"jm-candidate-actions\">\n            <button type=\"button\" class=\"jm-detail-btn\" data-open-full=\"${jm4EscapeHtml(c.id)}\">\n              Ver candidatura completa\n            <\/button>\n\n            ${cvUrl ? `<a class=\"jm-cv-btn\" href=\"${jm4EscapeHtml(cvUrl)}\" target=\"_blank\" rel=\"noopener\">Ver CV<\/a>` : \"\"}\n\n            <button type=\"button\" class=\"jm-small-btn\" data-open-contact=\"${jm4EscapeHtml(c.id)}\">\n              Ver contactos\n            <\/button>\n          <\/div>\n\n          ${jm4RenderReferencesStatus(c)}\n          ${jm4RenderReferencesBox(c)}\n\n          <div class=\"jm-contact-box\" id=\"jm-contact-${jm4EscapeHtml(c.id)}\">\n            <div class=\"jm-commercial-note\">\n              Sugest\u00e3o WIW: antes de contactar diretamente, pode pedir uma entrevista ao candidato com uma profissional certificada WIW.\n            <\/div>\n            <div class=\"jm-contact-details\">\n              <div><strong>Email:<\/strong> <a href=\"mailto:${jm4EscapeHtml(c.email_candidatura || c.email || \"\")}\">${jm4EscapeHtml(jm4SafeValue(c.email_candidatura || c.email, \"Sem email\"))}<\/a><\/div>\n              <div><strong>Telefone:<\/strong> <a href=\"tel:${jm4EscapeHtml(c.telefone_candidatura || c.telefone || \"\")}\">${jm4EscapeHtml(jm4SafeValue(c.telefone_candidatura || c.telefone, \"Sem telefone\"))}<\/a><\/div>\n              <div style=\"display:flex; gap:8px; flex-wrap:wrap; margin-top:8px;\">\n                <a class=\"jm-small-btn\" href=\"mailto:${jm4EscapeHtml(c.email_candidatura || c.email || \"\")}?subject=${encodeURIComponent(\"Candidatura WIW \u2014 \" + (c.oferta_titulo || \"Oferta\"))}\">Contactar por email<\/a>\n                <a class=\"jm-small-btn\" href=\"tel:${jm4EscapeHtml(c.telefone_candidatura || c.telefone || \"\")}\">Ligar<\/a>\n                <span class=\"jm-chat-btn\">Chat WIW em prepara\u00e7\u00e3o<\/span>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"jm-full-box\" id=\"jm-full-${jm4EscapeHtml(c.id)}\">\n            <div class=\"jm-full-grid\">\n              ${jm4FullItem(\"Motiva\u00e7\u00e3o\", c.motivacao)}\n              ${jm4FullItem(\"Experi\u00eancia relevante\", c.experiencia_relevante || c.resumo)}\n              ${jm4FullItem(\"Forma\u00e7\u00e3o relevante\", c.formacao_relevante)}\n              ${jm4FullItem(\"Mensagem para a entidade\", c.mensagem)}\n              ${jm4FullItem(\"Disponibilidade para come\u00e7ar\", c.disponibilidade_inicio)}\n              ${jm4FullItem(\"Disponibilidade hor\u00e1ria\", c.disponibilidade_horaria)}\n              ${jm4FullItem(\"Carta de condu\u00e7\u00e3o\", c.carta_conducao)}\n              ${jm4FullItem(\"Transporte pr\u00f3prio\", c.transporte_proprio)}\n              ${jm4FullItem(\"Observa\u00e7\u00f5es\", c.observacoes_candidatura)}\n              ${cvUrl ? `<div class=\"jm-full-item\"><strong>CV<\/strong><span><a href=\"${jm4EscapeHtml(cvUrl)}\" target=\"_blank\" rel=\"noopener\">${jm4EscapeHtml(cvName)}<\/a><\/span><\/div>` : \"\"}\n            <\/div>\n          <\/div>\n\n          <div class=\"jm-state-row\">\n            <label>Estado<\/label>\n            <select class=\"jm-state-select\" data-state-candidate=\"${jm4EscapeHtml(c.id)}\">\n              ${jm4StateOptions(estado)}\n            <\/select>\n          <\/div>\n\n          <div class=\"jm-candidate-actions\">\n            <button type=\"button\" class=\"jm-small-btn\" data-quick-state=\"${jm4EscapeHtml(c.id)}\" data-next-state=\"visto\">Marcar visto<\/button>\n            <button type=\"button\" class=\"jm-small-btn\" data-quick-state=\"${jm4EscapeHtml(c.id)}\" data-next-state=\"contactado\">Marcar contactado<\/button>\n            <button type=\"button\" class=\"jm-small-btn\" data-quick-state=\"${jm4EscapeHtml(c.id)}\" data-next-state=\"entrevista_marcada\">Entrevista marcada<\/button>\n            <button type=\"button\" class=\"jm-small-btn\" data-quick-state=\"${jm4EscapeHtml(c.id)}\" data-next-state=\"indeferido\">Indeferir<\/button>\n          <\/div>\n        <\/article>\n      `;\n    }\n\n    function jm4BindCandidateActions(state) {\n      document.querySelectorAll(\"[data-open-contact]\").forEach(function(btn) {\n        btn.addEventListener(\"click\", function() {\n          const id = btn.getAttribute(\"data-open-contact\");\n          const box = document.getElementById(\"jm-contact-\" + id);\n          if (box) box.classList.toggle(\"is-open\");\n        });\n      });\n\n      document.querySelectorAll(\"[data-open-full]\").forEach(function(btn) {\n        btn.addEventListener(\"click\", function() {\n          const id = btn.getAttribute(\"data-open-full\");\n          const box = document.getElementById(\"jm-full-\" + id);\n          if (box) box.classList.toggle(\"is-open\");\n        });\n      });\n\n      document.querySelectorAll(\"[data-open-references-status]\").forEach(function(btn) {\n        btn.addEventListener(\"click\", function() {\n          const id = btn.getAttribute(\"data-open-references-status\");\n          const box = document.getElementById(\"jm-references-\" + id);\n          const message = document.getElementById(\"jm-references-message-\" + id);\n\n          if (!box || !message) return;\n\n          const estado = box.getAttribute(\"data-references-state\") || \"sem_referencias\";\n          const total = parseInt(box.getAttribute(\"data-references-total\") || \"0\", 10);\n\n          if (estado === \"autorizadas\" && total > 0) {\n            box.classList.toggle(\"is-open\");\n            message.classList.remove(\"is-open\");\n            message.textContent = \"\";\n\n            btn.textContent = box.classList.contains(\"is-open\")\n              ? \"Fechar refer\u00eancias profissionais\"\n              : \"Refer\u00eancias profissionais\";\n            return;\n          }\n\n          box.classList.remove(\"is-open\");\n          btn.textContent = \"Refer\u00eancias profissionais\";\n\n          if (estado === \"nao_autorizadas\") {\n            message.textContent = \"O candidato n\u00e3o autorizou a consulta de refer\u00eancias profissionais nesta candidatura.\";\n          } else {\n            message.textContent = \"O candidato n\u00e3o tem refer\u00eancias profissionais dispon\u00edveis.\";\n          }\n\n          message.classList.toggle(\"is-open\");\n        });\n      });\n\nfunction jm4IsNegativeState(estado) {\n  return estado === \"nao_adaptavel\" || estado === \"indeferido\";\n}\n\nfunction jm4UpdateCandidateState(candidaturaId, novoEstado, controlEl) {\n\n  let enviarEmailResposta = \"0\";\n\n  if (jm4IsNegativeState(novoEstado)) {\n    const confirmarEmail = confirm(\n      \"Pretende enviar um email ao candidato a informar que desta vez foi escolhida outra candidatura?\\n\\nOK = Enviar email\\nCancelar = Apenas alterar o estado\"\n    );\n\n    if (confirmarEmail) {\n      enviarEmailResposta = \"1\";\n    }\n  }\n\n  const formData = new FormData();\n  formData.append(\"action\", \"jm4_atualizar_estado_candidatura\");\n  formData.append(\"candidatura_id\", candidaturaId);\n  formData.append(\"estado\", novoEstado);\n  formData.append(\"enviar_email_resposta\", enviarEmailResposta);\n\n  if (controlEl) controlEl.disabled = true;\n\n  fetch(\"\/wp-admin\/admin-ajax.php\", {\n    method: \"POST\",\n    credentials: \"same-origin\",\n    body: formData\n  })\n    .then(function(response) { return response.json(); })\n    .then(function(data) {\n      if (!data || !data.success) {\n        alert(data && data.message ? data.message : \"N\u00e3o foi poss\u00edvel atualizar o estado.\");\n        return;\n      }\n\n      if (data.message) {\n        alert(data.message);\n      }\n\n      if (data.candidatura) {\n        const index = state.candidaturas.findIndex(function(c) {\n          return String(c.id) === String(candidaturaId);\n        });\n\n        if (index >= 0) {\n          state.candidaturas[index] = data.candidatura;\n          state.render();\n        }\n      }\n    })\n    .catch(function() {\n      alert(\"Erro ao atualizar o estado.\");\n    })\n    .finally(function() {\n      if (controlEl) controlEl.disabled = false;\n    });\n}\n\n      document.querySelectorAll(\"[data-state-candidate]\").forEach(function(select) {\n        select.addEventListener(\"change\", function() {\n          jm4UpdateCandidateState(\n            select.getAttribute(\"data-state-candidate\"),\n            select.value,\n            select\n          );\n        });\n      });\n\n      document.querySelectorAll(\"[data-quick-state]\").forEach(function(btn) {\n        btn.addEventListener(\"click\", function() {\n          const candidaturaId = btn.getAttribute(\"data-quick-state\");\n          const novoEstado = btn.getAttribute(\"data-next-state\");\n          jm4UpdateCandidateState(candidaturaId, novoEstado, btn);\n        });\n      });\n    }\n  <\/script>\n\n  <script>\n    document.addEventListener(\"DOMContentLoaded\", function() {\n      const params = new URLSearchParams(window.location.search);\n      const ofertaId = params.get(\"oferta_id\") || params.get(\"oferta\") || \"\";\n\n      const message = document.getElementById(\"jm-page-message\");\n      const content = document.getElementById(\"jm-candidates-content\");\n      const list = document.getElementById(\"jm-candidates-list\");\n      const filter = document.getElementById(\"jm-state-filter\");\n      const totalLabel = document.getElementById(\"jm-total-label\");\n      const offerLabel = document.getElementById(\"jm-offer-label\");\n      const offerSubtitle = document.getElementById(\"jm-offer-subtitle\");\n\n      const state = {\n        candidaturas: [],\n        render: render\n      };\n\n      function showError(text) {\n        if (message) {\n          message.className = \"jm-page-message error\";\n          message.textContent = text;\n          message.style.display = \"block\";\n        }\n        if (content) content.style.display = \"none\";\n      }\n\n      function render() {\n        const selected = filter ? filter.value : \"all\";\n        const filtered = selected === \"all\"\n          ? state.candidaturas\n          : state.candidaturas.filter(function(c) { return c.estado === selected; });\n\n        if (totalLabel) {\n          totalLabel.textContent = filtered.length + (filtered.length === 1 ? \" candidatura\" : \" candidaturas\");\n        }\n\n        if (!list) return;\n\n        if (filtered.length === 0) {\n          list.innerHTML = '<div class=\"jm-empty-card\">Ainda n\u00e3o existem candidaturas com este filtro.<\/div>';\n          return;\n        }\n\n        list.innerHTML = filtered.map(jm4RenderCandidate).join(\"\");\n        jm4BindCandidateActions(state);\n      }\n\n      if (!ofertaId) {\n        showError(\"Oferta n\u00e3o indicada.\");\n        return;\n      }\n\n      fetch(\"\/wp-admin\/admin-ajax.php?action=jm4_candidaturas_oferta&oferta_id=\" + encodeURIComponent(ofertaId) + \"&t=\" + Date.now(), {\n        credentials: \"same-origin\",\n        cache: \"no-store\"\n      })\n        .then(function(response) { return response.json(); })\n        .then(function(data) {\n          if (!data || !data.success) {\n            showError(data && data.message ? data.message : \"N\u00e3o foi poss\u00edvel carregar candidaturas.\");\n            return;\n          }\n\n          state.candidaturas = Array.isArray(data.candidaturas) ? data.candidaturas : [];\n\n          if (offerLabel && data.oferta && data.oferta.titulo) {\n            offerLabel.textContent = \"\u2014 \" + data.oferta.titulo;\n          }\n\n          if (offerSubtitle && data.oferta && data.oferta.titulo) {\n            offerSubtitle.textContent = \"Candidaturas recebidas para: \" + data.oferta.titulo;\n          }\n\n          if (message) message.style.display = \"none\";\n          if (content) content.style.display = \"block\";\n\n          render();\n        })\n        .catch(function() {\n          showError(\"Erro ao carregar candidaturas.\");\n        });\n        \n        const sendNegativeEmailsBtn = document.getElementById(\"jm-send-negative-emails\");\n\nif (sendNegativeEmailsBtn) {\n  sendNegativeEmailsBtn.addEventListener(\"click\", function() {\n    const confirmar = confirm(\n      \"Pretende enviar email aos candidatos marcados como N\u00e3o adapt\u00e1vel ou Indeferido?\\n\\nEste email s\u00f3 ser\u00e1 enviado a candidatos que ainda n\u00e3o receberam esta resposta.\"\n    );\n\n    if (!confirmar) return;\n\n    const formData = new FormData();\n    formData.append(\"action\", \"jm4_enviar_emails_nao_selecionados\");\n    formData.append(\"oferta_id\", ofertaId);\n\n    sendNegativeEmailsBtn.disabled = true;\n    sendNegativeEmailsBtn.textContent = \"A enviar emails...\";\n\n    fetch(\"\/wp-admin\/admin-ajax.php\", {\n      method: \"POST\",\n      credentials: \"same-origin\",\n      body: formData\n    })\n      .then(function(response) { return response.json(); })\n      .then(function(data) {\n        if (!data || !data.success) {\n          alert(data && data.message ? data.message : \"N\u00e3o foi poss\u00edvel enviar os emails.\");\n          return;\n        }\n\n        alert(data.message || \"Processo conclu\u00eddo.\");\n      })\n      .catch(function() {\n        alert(\"Erro ao enviar emails.\");\n      })\n      .finally(function() {\n        sendNegativeEmailsBtn.disabled = false;\n        sendNegativeEmailsBtn.textContent = \"Enviar email aos candidatos n\u00e3o selecionados\";\n      });\n  });\n}\n\n      if (filter) {\n        filter.addEventListener(\"change\", render);\n      }\n    });\n  <\/script>\n\n  <style>\n    .jm-candidates-page,\n    .jm-candidates-offer-page {\n      width: 100%;\n      max-width: 100%;\n      min-height: calc(100vh - 120px);\n      padding: 46px 20px;\n      background:\n        radial-gradient(circle at top left, rgba(21,86,255,0.10), transparent 34%),\n        linear-gradient(180deg, #f5f9ff 0%, #eef5ff 100%);\n      box-sizing: border-box;\n      overflow-x: hidden;\n    }\n\n    .jm-candidates-page *,\n    .jm-candidates-offer-page * {\n      box-sizing: border-box;\n    }\n\n    .jm-candidates-shell {\n      width: 100%;\n      max-width: 1120px;\n      margin: 0 auto;\n    }\n\n    .jm-candidates-hero {\n      display: flex;\n      justify-content: space-between;\n      gap: 24px;\n      align-items: flex-end;\n      margin-bottom: 22px;\n      padding: 34px;\n      border-radius: 32px;\n      background: #ffffff;\n      box-shadow: 0 24px 70px rgba(20, 80, 170, 0.13);\n    }\n\n    .jm-candidates-badge {\n      display: inline-flex;\n      margin-bottom: 16px;\n      padding: 8px 14px;\n      border-radius: 999px;\n      background: rgba(21,86,255,0.08);\n      color: #1556ff;\n      font-size: 13px;\n      font-weight: 850;\n    }\n\n    .jm-candidates-hero h1 {\n      margin: 0 0 12px;\n      color: #15396f;\n      font-size: 40px;\n      line-height: 1.08;\n      font-weight: 950;\n      letter-spacing: -0.7px;\n      overflow-wrap: anywhere;\n    }\n\n    .jm-candidates-hero p {\n      max-width: 680px;\n      margin: 0;\n      color: #39577f;\n      font-size: 17px;\n      line-height: 1.5;\n    }\n    .jm-hero-actions {\n  display: flex;\n  gap: 10px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n.jm-email-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: 14px 20px;\n  border-radius: 999px;\n  border: 0;\n  background: linear-gradient(135deg, #1556ff, #159dff);\n  color: #ffffff;\n  font-size: 14px;\n  font-weight: 900;\n  cursor: pointer;\n  font-family: inherit;\n  box-shadow: 0 12px 28px rgba(24,95,255,0.20);\n}\n\n.jm-email-btn:disabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n}\n\n    .jm-back-btn {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      padding: 14px 20px;\n      border-radius: 999px;\n      background: #eef5ff;\n      color: #1556ff;\n      text-decoration: none;\n      font-size: 14px;\n      font-weight: 900;\n      white-space: nowrap;\n    }\n\n    .jm-candidates-toolbar {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 14px;\n      margin-bottom: 18px;\n      padding: 18px 22px;\n      border-radius: 24px;\n      background: #ffffff;\n      box-shadow: 0 18px 46px rgba(20, 80, 170, 0.10);\n    }\n\n    .jm-candidates-toolbar strong {\n      color: #15396f;\n      font-size: 16px;\n      font-weight: 950;\n    }\n\n    .jm-candidates-toolbar span {\n      color: #506783;\n      font-size: 14px;\n      margin-left: 6px;\n    }\n\n    .jm-candidates-toolbar select {\n      min-width: 220px;\n      padding: 12px 14px;\n      border: 1px solid #c9d9f2;\n      border-radius: 14px;\n      background: #ffffff;\n      color: #213b66;\n      font-size: 14px;\n      font-weight: 800;\n    }\n\n    .jm-candidates-list {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 18px;\n    }\n\n    .jm-candidate-card {\n      min-width: 0;\n      padding: 24px;\n      border-radius: 26px;\n      background: #ffffff;\n      border: 1px solid #dce8f8;\n      box-shadow: 0 18px 46px rgba(20, 80, 170, 0.10);\n      box-sizing: border-box;\n      overflow: hidden;\n    }\n\n    .jm-candidate-top {\n      display: flex;\n      justify-content: space-between;\n      gap: 14px;\n      align-items: flex-start;\n      margin-bottom: 14px;\n    }\n\n    .jm-candidate-card h2 {\n      margin: 0 0 7px;\n      color: #15396f;\n      font-size: 21px;\n      line-height: 1.2;\n      font-weight: 950;\n      overflow-wrap: anywhere;\n    }\n\n    .jm-candidate-offer {\n      display: block;\n      color: #506783;\n      font-size: 13px;\n      line-height: 1.4;\n      font-weight: 800;\n      overflow-wrap: anywhere;\n    }\n\n    .jm-status {\n      display: inline-flex;\n      flex: 0 0 auto;\n      padding: 7px 10px;\n      border-radius: 999px;\n      background: rgba(21,86,255,0.08);\n      color: #1556ff;\n      font-size: 12px;\n      font-weight: 950;\n      white-space: nowrap;\n    }\n\n    .jm-status.adaptavel {\n      background: rgba(36,160,90,0.12);\n      color: #17663a;\n    }\n\n    .jm-status.nao_adaptavel {\n      background: rgba(220,40,40,0.10);\n      color: #a12626;\n    }\n\n    .jm-status.enviado_entrevista,\n    .jm-status.entrevista_marcada {\n      background: rgba(243,178,51,0.20);\n      color: #805500;\n    }\n\n    .jm-status.contactado {\n      background: rgba(21,86,255,0.10);\n      color: #1556ff;\n    }\n\n    .jm-status.contratado {\n      background: rgba(36,160,90,0.14);\n      color: #17663a;\n    }\n\n    .jm-status.indeferido {\n      background: rgba(80, 90, 105, 0.12);\n      color: #516173;\n    }\n\n    .jm-candidate-meta {\n      display: grid;\n      gap: 9px;\n      margin: 15px 0;\n      padding: 14px;\n      border-radius: 18px;\n      background: #f8fbff;\n      border: 1px solid #e1ebf8;\n    }\n\n    .jm-candidate-meta div {\n      display: grid;\n      grid-template-columns: 110px 1fr;\n      gap: 10px;\n      color: #39577f;\n      font-size: 13px;\n      line-height: 1.4;\n      overflow-wrap: anywhere;\n    }\n\n    .jm-candidate-meta strong {\n      color: #15396f;\n      font-weight: 950;\n    }\n\n    .jm-candidate-summary {\n      margin: 0 0 14px;\n      color: #39577f;\n      font-size: 14px;\n      line-height: 1.55;\n      overflow-wrap: anywhere;\n    }\n\n    .jm-candidate-actions {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 10px;\n      margin-top: 16px;\n    }\n\n    .jm-small-btn,\n    .jm-cv-btn,\n    .jm-detail-btn,\n    .jm-chat-btn {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      min-height: 42px;\n      padding: 11px 14px;\n      border-radius: 999px;\n      border: 0;\n      background: #eef5ff;\n      color: #1556ff;\n      text-decoration: none;\n      font-size: 13px;\n      font-weight: 950;\n      cursor: pointer;\n      font-family: inherit;\n    }\n\n    .jm-detail-btn {\n      background: linear-gradient(135deg, #1556ff, #159dff);\n      color: #ffffff;\n      box-shadow: 0 10px 24px rgba(24,95,255,0.20);\n    }\n\n    .jm-chat-btn {\n      background: #f4f4f4;\n      color: #7d8da3;\n      cursor: not-allowed;\n    }\n\n    .jm-cv-btn {\n      background: rgba(36,160,90,0.12);\n      color: #17663a;\n    }\n\n    .jm-references-status {\n      margin-top: 16px;\n    }\n\n    .jm-references-btn {\n      min-height: 42px;\n      padding: 11px 14px;\n      border: 0;\n      border-radius: 999px;\n      background: #eef5ff;\n      color: #1556ff;\n      font-size: 13px;\n      font-weight: 950;\n      font-family: inherit;\n      cursor: pointer;\n    }\n\n    .jm-references-message {\n      display: none;\n      margin-top: 10px;\n      padding: 13px 15px;\n      border-radius: 16px;\n      background: #f8fbff;\n      border: 1px solid #d9e6f8;\n      color: #506783;\n      font-size: 13px;\n      line-height: 1.45;\n      font-weight: 750;\n    }\n\n    .jm-references-message.is-open {\n      display: block;\n    }\n\n    .jm-references-box {\n      display: none;\n      margin-top: 12px;\n      padding: 16px;\n      border-radius: 18px;\n      background: #f8fbff;\n      border: 1px solid #d9e6f8;\n    }\n\n    .jm-references-box.is-open {\n      display: grid;\n      gap: 12px;\n    }\n\n    .jm-reference-card {\n      padding: 15px;\n      border-radius: 16px;\n      background: #ffffff;\n      border: 1px solid #e1ebf8;\n    }\n\n    .jm-reference-line {\n      display: grid;\n      grid-template-columns: 150px 1fr;\n      gap: 10px;\n      margin-bottom: 8px;\n      color: #39577f;\n      font-size: 13px;\n      line-height: 1.45;\n    }\n\n    .jm-reference-line:last-child {\n      margin-bottom: 0;\n    }\n\n    .jm-reference-line strong,\n    .jm-reference-block > strong {\n      color: #15396f;\n      font-weight: 950;\n    }\n\n    .jm-reference-line span {\n      overflow-wrap: anywhere;\n    }\n\n    .jm-reference-block {\n      margin: 10px 0;\n    }\n\n    .jm-reference-list {\n      margin: 7px 0 0 18px;\n      padding: 0;\n      color: #39577f;\n      font-size: 13px;\n      line-height: 1.5;\n    }\n\n    .jm-contact-box,\n    .jm-full-box {\n      display: none;\n      margin-top: 14px;\n      padding: 16px;\n      border-radius: 18px;\n      background: #f8fbff;\n      border: 1px solid #d9e6f8;\n      color: #39577f;\n      font-size: 14px;\n      line-height: 1.5;\n    }\n\n    .jm-contact-box.is-open,\n    .jm-full-box.is-open {\n      display: block;\n    }\n\n    .jm-contact-details {\n      display: grid;\n      gap: 8px;\n    }\n\n    .jm-contact-details a {\n      color: #1556ff;\n      font-weight: 900;\n      overflow-wrap: anywhere;\n    }\n\n    .jm-commercial-note {\n      margin-bottom: 12px;\n      padding: 13px;\n      border-radius: 15px;\n      background: rgba(243,178,51,0.16);\n      color: #6f4d00;\n      font-size: 13px;\n      line-height: 1.45;\n      font-weight: 750;\n    }\n\n    .jm-full-grid {\n      display: grid;\n      gap: 12px;\n    }\n\n    .jm-full-item {\n      padding: 13px;\n      border-radius: 15px;\n      background: #ffffff;\n      border: 1px solid #e1ebf8;\n    }\n\n    .jm-full-item strong {\n      display: block;\n      margin-bottom: 6px;\n      color: #15396f;\n      font-size: 13px;\n      font-weight: 950;\n    }\n\n    .jm-full-item span,\n    .jm-full-item p {\n      display: block;\n      margin: 0;\n      color: #39577f;\n      font-size: 14px;\n      line-height: 1.5;\n      white-space: pre-wrap;\n      overflow-wrap: anywhere;\n    }\n\n    .jm-state-row {\n      display: grid;\n      grid-template-columns: 120px 1fr;\n      gap: 10px;\n      align-items: center;\n      margin-top: 14px;\n    }\n\n    .jm-state-row label {\n      color: #15396f;\n      font-size: 13px;\n      font-weight: 950;\n    }\n\n    .jm-state-select {\n      width: 100%;\n      padding: 11px 12px;\n      border: 1px solid #c9d9f2;\n      border-radius: 14px;\n      background: #ffffff;\n      color: #213b66;\n      font-size: 13px;\n      font-weight: 800;\n    }\n\n    .jm-page-message,\n    .jm-empty-card {\n      max-width: 760px;\n      margin: 0 auto 18px;\n      padding: 18px;\n      border-radius: 20px;\n      background: #ffffff;\n      border: 1px solid #d9e6f8;\n      color: #39577f;\n      box-shadow: 0 18px 46px rgba(20, 80, 170, 0.10);\n      font-size: 15px;\n      line-height: 1.5;\n    }\n\n    .jm-page-message.error {\n      background: rgba(220,40,40,0.08);\n      border-color: rgba(220,40,40,0.18);\n      color: #a12626;\n    }\n\n    @media (max-width: 1000px) {\n      .jm-candidates-list {\n        grid-template-columns: 1fr;\n      }\n    }\n\n    @media (max-width: 760px) {\n      .jm-candidates-hero,\n      .jm-candidates-toolbar {\n        align-items: stretch;\n        flex-direction: column;\n      }\n\n      .jm-back-btn,\n      .jm-candidates-toolbar select,\n      .jm-small-btn,\n      .jm-cv-btn,\n      .jm-detail-btn,\n      .jm-references-btn {\n        width: 100%;\n      }\n\n      .jm-candidate-top {\n        flex-direction: column;\n      }\n\n      .jm-status {\n        white-space: normal;\n      }\n    }\n\n    @media (max-width: 560px) {\n      .jm-candidates-page,\n      .jm-candidates-offer-page {\n        padding: 30px 10px;\n      }\n\n      .jm-candidates-hero,\n      .jm-candidate-card {\n        padding: 22px 16px;\n        border-radius: 24px;\n      }\n\n      .jm-candidates-toolbar {\n        padding: 16px;\n        border-radius: 22px;\n      }\n\n      .jm-candidates-hero h1 {\n        font-size: 30px;\n      }\n\n      .jm-candidate-meta div,\n      .jm-state-row,\n      .jm-reference-line {\n        grid-template-columns: 1fr;\n        gap: 4px;\n      }\n    }\n  <\/style>\n\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u00c1rea da Empresa WIW Candidaturas da oferta Consulte os candidatos desta oportunidade, veja CVs, detalhes da candidatura, contactos e atualize o estado de acompanhamento. Enviar email aos candidatos n\u00e3o selecionados Voltar \u00e0s minhas ofertas A carregar candidaturas&#8230; 0 candidaturas Todos os estadosNovo \/ n\u00e3o vistoVistoAdapt\u00e1velN\u00e3o adapt\u00e1velEnviado para entrevistaContactadoEntrevista marcadaContratadoIndeferido<\/p>","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-6913","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>WIW Candidaturas oferta - 3 Solutions | WE SPEAK RETAIL - Consultoria e Forma\u00e7\u00e3o retalho<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/3solutions.pt\/en\/jobmaps-candidaturas-oferta\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WIW Candidaturas oferta - 3 Solutions | WE SPEAK RETAIL - Consultoria e Forma\u00e7\u00e3o retalho\" \/>\n<meta property=\"og:description\" content=\"\u00c1rea da Empresa WIW Candidaturas da oferta Consulte os candidatos desta oportunidade, veja CVs, detalhes da candidatura, contactos e atualize o estado de acompanhamento. Enviar email aos candidatos n\u00e3o selecionados Voltar \u00e0s minhas ofertas A carregar candidaturas&#8230; 0 candidaturas Todos os estadosNovo \/ n\u00e3o vistoVistoAdapt\u00e1velN\u00e3o adapt\u00e1velEnviado para entrevistaContactadoEntrevista marcadaContratadoIndeferido\" \/>\n<meta property=\"og:url\" content=\"https:\/\/3solutions.pt\/en\/jobmaps-candidaturas-oferta\/\" \/>\n<meta property=\"og:site_name\" content=\"3 Solutions | WE SPEAK RETAIL - Consultoria e Forma\u00e7\u00e3o retalho\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/share\/17VAXrDnwy\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-21T21:19:25+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/3solutions.pt\\\/jobmaps-candidaturas-oferta\\\/\",\"url\":\"https:\\\/\\\/3solutions.pt\\\/jobmaps-candidaturas-oferta\\\/\",\"name\":\"WIW Candidaturas oferta - 3 Solutions | WE SPEAK RETAIL - Consultoria e Forma\u00e7\u00e3o retalho\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/3solutions.pt\\\/#website\"},\"datePublished\":\"2026-06-16T15:45:16+00:00\",\"dateModified\":\"2026-07-21T21:19:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/3solutions.pt\\\/jobmaps-candidaturas-oferta\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/3solutions.pt\\\/jobmaps-candidaturas-oferta\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/3solutions.pt\\\/jobmaps-candidaturas-oferta\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/3solutions.pt\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WIW Candidaturas oferta\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/3solutions.pt\\\/#website\",\"url\":\"https:\\\/\\\/3solutions.pt\\\/\",\"name\":\"3Solutions Consultoria em Marketing e Gest\u00e3o\",\"description\":\"Consultoria e Marketing Digital\",\"publisher\":{\"@id\":\"https:\\\/\\\/3solutions.pt\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/3solutions.pt\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/3solutions.pt\\\/#organization\",\"name\":\"3Solutions Consultoria em Marketing e Gest\u00e3o\",\"url\":\"https:\\\/\\\/3solutions.pt\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/3solutions.pt\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/3solutions.pt\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/cropped-Prancheta-1-copia-scaled-1.png\",\"contentUrl\":\"https:\\\/\\\/3solutions.pt\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/cropped-Prancheta-1-copia-scaled-1.png\",\"width\":1505,\"height\":785,\"caption\":\"3Solutions Consultoria em Marketing e Gest\u00e3o\"},\"image\":{\"@id\":\"https:\\\/\\\/3solutions.pt\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/share\\\/17VAXrDnwy\\\/\",\"https:\\\/\\\/www.instagram.com\\\/wespeakretail?igsh=d2Y0a2RzY29nN2Fv\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WIW Candidaturas oferta - 3 Solutions | WE SPEAK RETAIL - Consultoria e Forma\u00e7\u00e3o retalho","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/3solutions.pt\/en\/jobmaps-candidaturas-oferta\/","og_locale":"en_GB","og_type":"article","og_title":"WIW Candidaturas oferta - 3 Solutions | WE SPEAK RETAIL - Consultoria e Forma\u00e7\u00e3o retalho","og_description":"\u00c1rea da Empresa WIW Candidaturas da oferta Consulte os candidatos desta oportunidade, veja CVs, detalhes da candidatura, contactos e atualize o estado de acompanhamento. Enviar email aos candidatos n\u00e3o selecionados Voltar \u00e0s minhas ofertas A carregar candidaturas&#8230; 0 candidaturas Todos os estadosNovo \/ n\u00e3o vistoVistoAdapt\u00e1velN\u00e3o adapt\u00e1velEnviado para entrevistaContactadoEntrevista marcadaContratadoIndeferido","og_url":"https:\/\/3solutions.pt\/en\/jobmaps-candidaturas-oferta\/","og_site_name":"3 Solutions | WE SPEAK RETAIL - Consultoria e Forma\u00e7\u00e3o retalho","article_publisher":"https:\/\/www.facebook.com\/share\/17VAXrDnwy\/","article_modified_time":"2026-07-21T21:19:25+00:00","twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/3solutions.pt\/jobmaps-candidaturas-oferta\/","url":"https:\/\/3solutions.pt\/jobmaps-candidaturas-oferta\/","name":"WIW Candidaturas oferta - 3 Solutions | WE SPEAK RETAIL - Consultoria e Forma\u00e7\u00e3o retalho","isPartOf":{"@id":"https:\/\/3solutions.pt\/#website"},"datePublished":"2026-06-16T15:45:16+00:00","dateModified":"2026-07-21T21:19:25+00:00","breadcrumb":{"@id":"https:\/\/3solutions.pt\/jobmaps-candidaturas-oferta\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/3solutions.pt\/jobmaps-candidaturas-oferta\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/3solutions.pt\/jobmaps-candidaturas-oferta\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/3solutions.pt\/"},{"@type":"ListItem","position":2,"name":"WIW Candidaturas oferta"}]},{"@type":"WebSite","@id":"https:\/\/3solutions.pt\/#website","url":"https:\/\/3solutions.pt\/","name":"3Solutions Consultoria em Marketing e Gest\u00e3o","description":"Consultoria e Marketing Digital","publisher":{"@id":"https:\/\/3solutions.pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/3solutions.pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/3solutions.pt\/#organization","name":"3Solutions Consultoria em Marketing e Gest\u00e3o","url":"https:\/\/3solutions.pt\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/3solutions.pt\/#\/schema\/logo\/image\/","url":"https:\/\/3solutions.pt\/wp-content\/uploads\/2026\/05\/cropped-Prancheta-1-copia-scaled-1.png","contentUrl":"https:\/\/3solutions.pt\/wp-content\/uploads\/2026\/05\/cropped-Prancheta-1-copia-scaled-1.png","width":1505,"height":785,"caption":"3Solutions Consultoria em Marketing e Gest\u00e3o"},"image":{"@id":"https:\/\/3solutions.pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/share\/17VAXrDnwy\/","https:\/\/www.instagram.com\/wespeakretail?igsh=d2Y0a2RzY29nN2Fv"]}]}},"_links":{"self":[{"href":"https:\/\/3solutions.pt\/en\/wp-json\/wp\/v2\/pages\/6913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/3solutions.pt\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/3solutions.pt\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/3solutions.pt\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/3solutions.pt\/en\/wp-json\/wp\/v2\/comments?post=6913"}],"version-history":[{"count":43,"href":"https:\/\/3solutions.pt\/en\/wp-json\/wp\/v2\/pages\/6913\/revisions"}],"predecessor-version":[{"id":8093,"href":"https:\/\/3solutions.pt\/en\/wp-json\/wp\/v2\/pages\/6913\/revisions\/8093"}],"wp:attachment":[{"href":"https:\/\/3solutions.pt\/en\/wp-json\/wp\/v2\/media?parent=6913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}