{"id":119,"date":"2026-08-19T13:18:23","date_gmt":"2026-08-19T13:18:23","guid":{"rendered":"https:\/\/ternullomelo.com\/?page_id=119"},"modified":"2026-09-22T10:44:45","modified_gmt":"2026-09-22T10:44:45","slug":"portfolio-projetos","status":"publish","type":"page","link":"https:\/\/ternullomelo.com\/en\/portfolio-projetos\/","title":{"rendered":"Portf\u00f3lio"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling fusion-no-small-visibility fusion-no-medium-visibility\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:30px;--awb-padding-right:50px;--awb-padding-bottom:70px;--awb-padding-left:50px;--awb-margin-top:0px;--awb-margin-bottom:0px;--awb-background-color:var(--awb-color4);--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1456px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-bottom:30px;--awb-margin-top-small:10px;--awb-margin-right-small:0px;--awb-margin-bottom-small:10px;--awb-margin-left-small:0px;--awb-font-size:36px;\"><h2 class=\"fusion-title-heading title-heading-left\" style=\"font-family:&quot;Archivo&quot;;font-style:normal;font-weight:700;margin:0;text-transform:uppercase;font-size:1em;line-height:1.2;\">Portf\u00f3lio<\/h2><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><style>\n\/* =====================================\n   PORTF\u00d3LIO TERNULLO MELO\n===================================== *\/\n\n.tm-portfolio {\n    width: 100%;\n    max-width: 1456px;\n    margin: 0 auto;\n    padding: 0 !important;\n    box-sizing: border-box;\n    font-family: \"Archivo\", sans-serif;\n}\n\n\n\/* =====================================\n   FILTROS\n===================================== *\/\n\n.tm-portfolio-filters {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap;\n    gap: 0;\n    margin-bottom: 42px;\n}\n\n.tm-filter {\n    appearance: none;\n    -webkit-appearance: none;\n    background: transparent;\n    border: 0 !important;\n    padding: 0 19px;\n    margin: 0;\n    cursor: pointer;\n    font-family: \"Archivo\", sans-serif;\n    font-size: 12px !important;\n    font-weight: 400;\n    line-height: 1;\n    letter-spacing: 6% !important;\n    text-transform: uppercase;\n    color: #7A7A7A !important;\n    transition: color .25s ease;\n}\n\n.tm-portfolio .tm-filter:not(.active)::before,\n.tm-portfolio .tm-filter:not(.active)::after {\n    content: none !important;\n    display: none !important;\n    border: 0 !important;\n    background: none !important;\n}\n\n.tm-filter.active {\n    position: relative;\n    padding-left: 16px;\n}\n\n@media (min-width: 1025px) {\n    .tm-filter:first-child:not(.active) {\n        padding-left: 0 !important;\n    }\n}\n\n.tm-portfolio .tm-filter.active::before {\n    content: \"\" !important;\n    display: block !important;\n    position: absolute;\n    left: 0;\n    top: 50%;\n    width: 2px;\n    height: 12px !important;\n    background: #A2674C !important;\n    border: 0 !important;\n    transform: translateY(-50%);\n}\n\n.tm-filter:hover,\n.tm-filter.active {\n    color: #1A1A1A !important;\n}\n\n\n\/* =====================================\n   DESKTOP\n===================================== *\/\n\n.tm-portfolio-grid {\n    display: grid;\n\n    grid-template-columns:\n        minmax(0, 1.22fr)\n        minmax(0, .22fr)\n        minmax(0, 1fr);\n\n    grid-template-areas:\n        \"santa santa coop\"\n        \"casa erpi erpi\";\n\n    column-gap: 76px;\n    row-gap: 82px;\n\n    align-items: start;\n}\n\n\n\/* =====================================\n   POSICIONAMENTO DESKTOP\n===================================== *\/\n\n.tm-project--santa {\n    grid-area: santa;\n    max-width: 660px;\n}\n\n.tm-project--coop {\n    grid-area: coop;\n    width: 100%;\n}\n\n.tm-project--casa {\n    grid-area: casa;\n    max-width: 430px;\n}\n\n.tm-project--erpi {\n    grid-area: erpi;\n    max-width: 430px;\n    justify-self: start;\n}\n\n\n\/* =====================================\n   FILTRO ATIVO\n===================================== *\/\n\n.tm-portfolio-grid.is-filtered {\n    display: flex;\n    flex-wrap: wrap;\n\n    justify-content: flex-start;\n    align-items: flex-start;\n\n    gap: 82px 76px;\n}\n\n.tm-portfolio-grid.is-filtered .tm-project {\n    grid-area: auto !important;\n    justify-self: auto !important;\n    margin: 0;\n}\n\n\n\/* TAMANHOS QUANDO FILTRADO *\/\n\n.tm-portfolio-grid.is-filtered .tm-project--santa {\n    width: min(100%, 660px);\n    max-width: 660px;\n}\n\n.tm-portfolio-grid.is-filtered .tm-project--coop {\n    width: min(100%, 500px);\n    max-width: 500px;\n}\n\n.tm-portfolio-grid.is-filtered .tm-project--casa,\n.tm-portfolio-grid.is-filtered .tm-project--erpi {\n    width: min(100%, 430px);\n    max-width: 430px;\n}\n\n\n\/* =====================================\n   CARDS\n===================================== *\/\n\n.tm-project {\n    opacity: 1;\n}\n\n.tm-project.hidden {\n    display: none !important;\n}\n\n.tm-project-link {\n    display: block;\n\n    width: 100%;\n\n    color: inherit;\n    text-decoration: none !important;\n}\n\n\n\/* =====================================\n   IMAGENS\n===================================== *\/\n\n.tm-project-image {\n    position: relative;\n\n    width: 100%;\n\n    overflow: hidden;\n\n    background: #e9e8e5;\n}\n\n\n\/* PROPOR\u00c7\u00d5ES DESKTOP *\/\n\n.tm-project--santa .tm-project-image {\n    aspect-ratio: 1.38 \/ 1;\n}\n\n.tm-project--coop .tm-project-image {\n    aspect-ratio: 1.12 \/ 1;\n}\n\n.tm-project--casa .tm-project-image,\n.tm-project--erpi .tm-project-image {\n    aspect-ratio: 1.08 \/ 1;\n}\n\n\n.tm-project-image img {\n    display: block;\n\n    width: 100%;\n    height: 100%;\n\n    object-fit: cover;\n\n    transition:\n        transform .65s cubic-bezier(.2,.7,.2,1);\n}\n\n\n\/* HOVER *\/\n\n.tm-project-link:hover .tm-project-image img {\n    transform: scale(1.015);\n}\n\n\n\/* =====================================\n   TEXTO\n===================================== *\/\n\n.tm-project-info {\n    padding-top: 13px;\n}\n\n\n\/* T\u00cdTULO\n   Archivo Light\n   14px\n   Line-height 16px\n   Letter-spacing 1%\n*\/\n\n.tm-project-title {\n    display: block;\n    margin: 0;\n    font-family: \"Archivo\", sans-serif;\n    font-size: 14px;\n    font-weight: 300;\n    line-height: 16px;\n    letter-spacing: 1%;\n    color: #1A1A1A;\n}\n\n\n\/* CATEGORIA\n   Archivo SemiBold\n   11px\n   Letter-spacing 6%\n*\/\n\n.tm-project-category {\n    display: block;\n    margin-top: 10px;\n    font-family: \"Archivo\", sans-serif;\n    font-size: 11px;\n    font-weight: 600;\n    line-height: normal;\n    letter-spacing: 6%;\n    text-transform: uppercase;\n    color: #7A7A7A !important;\n}\n\n\n\/* =====================================\n   TABLET\n   2 ITENS POR LINHA\n===================================== *\/\n\n@media (min-width: 641px) and (max-width: 1024px) {\n\n    .tm-portfolio {\n        padding: 0 !important;\n    }\n\n\n    \/* FILTRO VERTICAL *\/\n\n    .tm-portfolio-filters {\n        display: flex;\n\n        flex-direction: column;\n        align-items: flex-start;\n\n        flex-wrap: nowrap;\n\n        gap: 14px;\n\n        margin-bottom: 42px;\n    }\n\n    .tm-filter {\n        display: block;\n\n        width: auto;\n\n        padding: 0;\n\n        text-align: left;\n\n        font-size: 10px;\n    }\n\n    .tm-filter.active {\n        padding-left: 14px;\n    }\n\n\n    \/* GRID 2 COLUNAS *\/\n\n    .tm-portfolio-grid,\n    .tm-portfolio-grid.is-filtered {\n        display: grid !important;\n\n        grid-template-columns:\n            repeat(2, minmax(0, 1fr)) !important;\n\n        grid-template-areas: none !important;\n\n        column-gap: 30px;\n        row-gap: 55px;\n\n        align-items: start;\n\n        width: 100%;\n    }\n\n\n    \/* TODOS IGUAIS *\/\n\n    .tm-portfolio-grid .tm-project,\n    .tm-portfolio-grid.is-filtered .tm-project,\n    .tm-project--santa,\n    .tm-project--coop,\n    .tm-project--casa,\n    .tm-project--erpi {\n        grid-area: auto !important;\n\n        width: 100% !important;\n        max-width: none !important;\n\n        margin: 0 !important;\n\n        justify-self: stretch !important;\n    }\n\n\n    \/* IMAGENS IGUAIS *\/\n\n    .tm-project--santa .tm-project-image,\n    .tm-project--coop .tm-project-image,\n    .tm-project--casa .tm-project-image,\n    .tm-project--erpi .tm-project-image {\n        aspect-ratio: 1.25 \/ 1 !important;\n    }\n\n}\n\n\n\/* =====================================\n   MOBILE\n   1 ITEM POR LINHA\n===================================== *\/\n\n@media (max-width: 640px) {\n\n    .tm-portfolio {\n        padding: 0 !important;\n    }\n\n\n    \/* FILTRO VERTICAL *\/\n\n    .tm-portfolio-filters {\n        display: flex;\n\n        flex-direction: column;\n        align-items: flex-start;\n\n        flex-wrap: nowrap;\n\n        gap: 13px;\n\n        margin-bottom: 35px;\n    }\n\n    .tm-filter {\n        display: block;\n\n        width: auto;\n\n        padding: 0 !important;\n\n        font-size: 9px;\n\n        text-align: left;\n    }\n\n    .tm-filter.active {\n        padding-left: 13px !important;\n    }\n\n    .tm-filter.active::before {\n        height: 10px;\n    }\n\n\n    \/* GRID 1 COLUNA *\/\n\n    .tm-portfolio-grid,\n    .tm-portfolio-grid.is-filtered {\n        display: grid !important;\n\n        grid-template-columns: 1fr !important;\n        grid-template-areas: none !important;\n\n        gap: 45px;\n\n        width: 100%;\n    }\n\n\n    \/* TODOS IGUAIS *\/\n\n    .tm-portfolio-grid .tm-project,\n    .tm-portfolio-grid.is-filtered .tm-project,\n    .tm-project--santa,\n    .tm-project--coop,\n    .tm-project--casa,\n    .tm-project--erpi {\n        grid-area: auto !important;\n\n        width: 100% !important;\n        max-width: none !important;\n\n        margin: 0 !important;\n\n        justify-self: stretch !important;\n    }\n\n\n    \/* TODAS AS IMAGENS IGUAIS *\/\n\n    .tm-project--santa .tm-project-image,\n    .tm-project--coop .tm-project-image,\n    .tm-project--casa .tm-project-image,\n    .tm-project--erpi .tm-project-image {\n        aspect-ratio: 1.25 \/ 1 !important;\n    }\n\n}\n\n<\/style>\n\n\n<section class=\"tm-portfolio\">\n\n\n    <!-- =====================================\n         FILTROS\n    ====================================== -->\n\n    <div class=\"tm-portfolio-filters\">\n\n        <button\n            class=\"tm-filter active\"\n            type=\"button\"\n            data-filter=\"all\">\n            TODOS\n        <\/button>\n\n        <button\n            class=\"tm-filter\"\n            type=\"button\"\n            data-filter=\"equipamento\">\n            EQUIPAMENTO\n        <\/button>\n\n        <button\n            class=\"tm-filter\"\n            type=\"button\"\n            data-filter=\"espaco-publico\">\n            ESPA\u00c7O P\u00daBLICO\n        <\/button>\n\n        <button\n            class=\"tm-filter\"\n            type=\"button\"\n            data-filter=\"concursos\">\n            CONCURSOS\n        <\/button>\n\n        <button\n            class=\"tm-filter\"\n            type=\"button\"\n            data-filter=\"habitacao\">\n            HABITA\u00c7\u00c3O\n        <\/button>\n\n    <\/div>\n\n\n    <!-- =====================================\n         PROJETOS\n    ====================================== -->\n\n    <div class=\"tm-portfolio-grid\">\n\n\n        <!-- =====================================\n             PRA\u00c7A SANTA CLARA\n             NOVA IMAGEM\n        ====================================== -->\n\n        <article\n            class=\"tm-project tm-project--santa\"\n            data-category=\"espaco-publico\">\n\n            <a\n                class=\"tm-project-link\"\n                href=\"\/en\/portfolio\/praca-santa-clara-lisboa-pt\/\">\n\n                <div class=\"tm-project-image\">\n\n                    <img\n                        src=\"https:\/\/ternullomelo.com\/wp-content\/uploads\/2026\/08\/project-image-2.png\"\n                        alt=\"Pra\u00e7a Santa Clara, Lisboa, PT\"\n                        fetchpriority=\"high\"\n                        decoding=\"async\">\n\n                <\/div>\n\n\n                <div class=\"tm-project-info\">\n\n                    <span class=\"tm-project-title\">\n                        Pra\u00e7a Santa Clara, Lisboa, PT\n                    <\/span>\n\n                    <span class=\"tm-project-category\">\n                        Espa\u00e7o P\u00fablico\n                    <\/span>\n\n                <\/div>\n\n            <\/a>\n\n        <\/article>\n\n\n\n        <!-- =====================================\n             COOPERATIVA\n        ====================================== -->\n\n        <article\n            class=\"tm-project tm-project--coop\"\n            data-category=\"concursos\">\n\n            <a\n                class=\"tm-project-link\"\n                href=\"\/en\/portfolio\/cooperativa-de-habitacao-outeiro-lugar-comum-maia-pt\/\">\n\n                <div class=\"tm-project-image\">\n\n                    <img\n                        src=\"https:\/\/ternullomelo.com\/wp-content\/uploads\/2026\/08\/Cooperativa-de-Habitacao-1.png\"\n                        alt=\"Cooperativa de Habita\u00e7\u00e3o Outeiro Lugar Comum, Maia, PT\"\n                        fetchpriority=\"high\"\n                        decoding=\"async\">\n\n                <\/div>\n\n\n                <div class=\"tm-project-info\">\n\n                    <span class=\"tm-project-title\">\n                        Cooperativa de Habita\u00e7\u00e3o Outeiro Lugar Comum, Maia, PT\n                    <\/span>\n\n                    <span class=\"tm-project-category\">\n                        Concursos\n                    <\/span>\n\n                <\/div>\n\n            <\/a>\n\n        <\/article>\n\n\n\n        <!-- =====================================\n             CASA ALG\u00c9S\n             NOVA IMAGEM\n        ====================================== -->\n\n        <article\n            class=\"tm-project tm-project--casa\"\n            data-category=\"habitacao\">\n\n            <a\n                class=\"tm-project-link\"\n                href=\"\/en\/portfolio\/casa-em-alges-lisboa-pt\/\">\n\n                <div class=\"tm-project-image\">\n\n                    <img\n                        src=\"https:\/\/ternullomelo.com\/wp-content\/uploads\/2026\/08\/project-image-1.png\"\n                        alt=\"Casa em Alg\u00e9s, Lisboa, PT\"\n                        loading=\"lazy\"\n                        decoding=\"async\">\n\n                <\/div>\n\n\n                <div class=\"tm-project-info\">\n\n                    <span class=\"tm-project-title\">\n                        Casa em Alg\u00e9s, Lisboa, PT\n                    <\/span>\n\n                    <span class=\"tm-project-category\">\n                        Habita\u00e7\u00e3o\n                    <\/span>\n\n                <\/div>\n\n            <\/a>\n\n        <\/article>\n\n\n\n        <!-- =====================================\n             ERPI\n        ====================================== -->\n\n        <article\n            class=\"tm-project tm-project--erpi\"\n            data-category=\"equipamento\">\n\n            <a\n                class=\"tm-project-link\"\n                href=\"\/en\/portfolio\/erpi-castro-marim-pt\/\">\n\n                <div class=\"tm-project-image\">\n\n                    <img\n                        src=\"https:\/\/ternullomelo.com\/wp-content\/uploads\/2026\/08\/ERPI-Castro-Marim-PT-1.png\"\n                        alt=\"ERPI, Castro Marim, PT\"\n                        loading=\"lazy\"\n                        decoding=\"async\">\n\n                <\/div>\n\n\n                <div class=\"tm-project-info\">\n\n                    <span class=\"tm-project-title\">\n                        ERPI, Castro Marim, PT\n                    <\/span>\n\n                    <span class=\"tm-project-category\">\n                        Equipamento\n                    <\/span>\n\n                <\/div>\n\n            <\/a>\n\n        <\/article>\n\n\n    <\/div>\n\n<\/section>\n\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n    const portfolio =\n        document.querySelector(\".tm-portfolio\");\n\n    if (!portfolio) {\n        return;\n    }\n\n\n    const grid =\n        portfolio.querySelector(\".tm-portfolio-grid\");\n\n    const filters =\n        portfolio.querySelectorAll(\".tm-filter\");\n\n    const projects =\n        portfolio.querySelectorAll(\".tm-project\");\n\n\n    \/* =====================================\n       FILTRO\n    ====================================== *\/\n\n    filters.forEach(function (button) {\n\n        button.addEventListener(\"click\", function () {\n\n            const selected =\n                button.dataset.filter;\n\n\n            \/* FILTRO ATIVO *\/\n\n            filters.forEach(function (filter) {\n\n                filter.classList.remove(\"active\");\n\n            });\n\n\n            button.classList.add(\"active\");\n\n\n            \/* TODOS *\/\n\n            if (selected === \"all\") {\n\n                grid.classList.remove(\n                    \"is-filtered\"\n                );\n\n\n                projects.forEach(function (project) {\n\n                    project.classList.remove(\n                        \"hidden\"\n                    );\n\n                });\n\n\n                return;\n            }\n\n\n            \/* CATEGORIA *\/\n\n            grid.classList.add(\n                \"is-filtered\"\n            );\n\n\n            projects.forEach(function (project) {\n\n                const category =\n                    project.dataset.category;\n\n\n                if (category === selected) {\n\n                    project.classList.remove(\n                        \"hidden\"\n                    );\n\n                } else {\n\n                    project.classList.add(\n                        \"hidden\"\n                    );\n\n                }\n\n            });\n\n        });\n\n    });\n\n});\n<\/script><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling fusion-no-large-visibility fusion-custom-z-index\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-z-index:0;--awb-padding-top:70px;--awb-padding-right:50px;--awb-padding-bottom:70px;--awb-padding-left:50px;--awb-padding-top-medium:30px;--awb-padding-right-medium:50px;--awb-padding-bottom-medium:70px;--awb-padding-left-medium:50px;--awb-padding-top-small:30px;--awb-padding-right-small:30px;--awb-padding-bottom-small:50px;--awb-padding-left-small:30px;--awb-margin-top:0px;--awb-margin-bottom:0px;--awb-background-color:var(--awb-color4);--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1456px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-2 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-top-small:10px;--awb-margin-right-small:0px;--awb-margin-bottom-small:30px;--awb-margin-left-small:0px;--awb-margin-bottom-medium:30px;--awb-font-size:26px;\"><h2 class=\"fusion-title-heading title-heading-left\" style=\"font-family:&quot;Archivo&quot;;font-style:normal;font-weight:700;margin:0;text-transform:uppercase;font-size:1em;line-height:1.2;\">Portf\u00f3lio<\/h2><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><style>\n\/* =====================================\n   PORTF\u00d3LIO TERNULLO MELO\n===================================== *\/\n\n.tm-portfolio {\n    width: 100%;\n    max-width: 1456px;\n    margin: 0 auto;\n    padding: 0 !important;\n    box-sizing: border-box;\n    font-family: \"Archivo\", sans-serif;\n}\n\n\n\/* =====================================\n   FILTROS\n===================================== *\/\n\n.tm-portfolio-filters {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap;\n    gap: 0;\n    margin-bottom: 42px;\n}\n\n.tm-filter {\n    appearance: none;\n    -webkit-appearance: none;\n    background: transparent;\n    border: 0 !important;\n    padding: 0 19px;\n    margin: 0;\n    cursor: pointer;\n    font-family: \"Archivo\", sans-serif;\n    font-size: 12px !important;\n    font-weight: 400;\n    line-height: 1;\n    letter-spacing: 6% !important;\n    text-transform: uppercase;\n    color: #7A7A7A !important;\n    transition: color .25s ease;\n}\n\n.tm-portfolio .tm-filter:not(.active)::before,\n.tm-portfolio .tm-filter:not(.active)::after {\n    content: none !important;\n    display: none !important;\n    border: 0 !important;\n    background: none !important;\n}\n\n.tm-filter.active {\n    position: relative;\n    padding-left: 16px;\n}\n\n.tm-portfolio .tm-filter.active::before {\n    content: \"\" !important;\n    display: block !important;\n    position: absolute;\n    left: 0;\n    top: 50%;\n    width: 2px;\n    height: 12px !important;\n    background: #A2674C !important;\n    border: 0 !important;\n    transform: translateY(-50%);\n}\n\n.tm-filter:hover,\n.tm-filter.active {\n    color: #1A1A1A !important;\n}\n\n\n\/* =====================================\n   DESKTOP\n===================================== *\/\n\n.tm-portfolio-grid {\n    display: grid;\n\n    grid-template-columns:\n        minmax(0, 1.22fr)\n        minmax(0, .22fr)\n        minmax(0, 1fr);\n\n    grid-template-areas:\n        \"santa santa coop\"\n        \"casa erpi erpi\";\n\n    column-gap: 76px;\n    row-gap: 82px;\n\n    align-items: start;\n}\n\n\n\/* =====================================\n   POSICIONAMENTO DESKTOP\n===================================== *\/\n\n.tm-project--santa {\n    grid-area: santa;\n    max-width: 660px;\n}\n\n.tm-project--coop {\n    grid-area: coop;\n    width: 100%;\n}\n\n.tm-project--casa {\n    grid-area: casa;\n    max-width: 430px;\n}\n\n.tm-project--erpi {\n    grid-area: erpi;\n    max-width: 430px;\n    justify-self: start;\n}\n\n\n\/* =====================================\n   FILTRO ATIVO\n===================================== *\/\n\n.tm-portfolio-grid.is-filtered {\n    display: flex;\n    flex-wrap: wrap;\n\n    justify-content: flex-start;\n    align-items: flex-start;\n\n    gap: 82px 76px;\n}\n\n.tm-portfolio-grid.is-filtered .tm-project {\n    grid-area: auto !important;\n    justify-self: auto !important;\n    margin: 0;\n}\n\n\n\/* TAMANHOS QUANDO FILTRADO *\/\n\n.tm-portfolio-grid.is-filtered .tm-project--santa {\n    width: min(100%, 660px);\n    max-width: 660px;\n}\n\n.tm-portfolio-grid.is-filtered .tm-project--coop {\n    width: min(100%, 500px);\n    max-width: 500px;\n}\n\n.tm-portfolio-grid.is-filtered .tm-project--casa,\n.tm-portfolio-grid.is-filtered .tm-project--erpi {\n    width: min(100%, 430px);\n    max-width: 430px;\n}\n\n\n\/* =====================================\n   CARDS\n===================================== *\/\n\n.tm-project {\n    opacity: 1;\n}\n\n.tm-project.hidden {\n    display: none !important;\n}\n\n.tm-project-link {\n    display: block;\n\n    width: 100%;\n\n    color: inherit;\n    text-decoration: none !important;\n}\n\n\n\/* =====================================\n   IMAGENS\n===================================== *\/\n\n.tm-project-image {\n    position: relative;\n\n    width: 100%;\n\n    overflow: hidden;\n\n    background: #e9e8e5;\n}\n\n\n\/* PROPOR\u00c7\u00d5ES DESKTOP *\/\n\n.tm-project--santa .tm-project-image {\n    aspect-ratio: 1.38 \/ 1;\n}\n\n.tm-project--coop .tm-project-image {\n    aspect-ratio: 1.12 \/ 1;\n}\n\n.tm-project--casa .tm-project-image,\n.tm-project--erpi .tm-project-image {\n    aspect-ratio: 1.08 \/ 1;\n}\n\n\n.tm-project-image img {\n    display: block;\n\n    width: 100%;\n    height: 100%;\n\n    object-fit: cover;\n\n    transition:\n        transform .65s cubic-bezier(.2,.7,.2,1);\n}\n\n\n\/* HOVER *\/\n\n.tm-project-link:hover .tm-project-image img {\n    transform: scale(1.015);\n}\n\n\n\/* =====================================\n   TEXTO\n===================================== *\/\n\n.tm-project-info {\n    padding-top: 13px;\n}\n\n\n\/* T\u00cdTULO\n   Archivo Light\n   14px\n   Line-height 16px\n   Letter-spacing 1%\n*\/\n\n.tm-project-title {\n    display: block;\n    margin: 0;\n    font-family: \"Archivo\", sans-serif;\n    font-size: 14px;\n    font-weight: 300;\n    line-height: 16px;\n    letter-spacing: 1%;\n    color: #1A1A1A;\n}\n\n\n\/* CATEGORIA\n   Archivo SemiBold\n   11px\n   Letter-spacing 6%\n*\/\n\n.tm-project-category {\n    display: block;\n    margin-top: 10px;\n    font-family: \"Archivo\", sans-serif;\n    font-size: 11px;\n    font-weight: 600;\n    line-height: normal;\n    letter-spacing: 6%;\n    text-transform: uppercase;\n    color: #7A7A7A !important;\n}\n\n\n\/* =====================================\n   TABLET\n   2 ITENS POR LINHA\n===================================== *\/\n\n@media (min-width: 641px) and (max-width: 1024px) {\n\n    .tm-portfolio {\n        padding: 0 !important;\n    }\n\n\n    \/* FILTRO VERTICAL *\/\n\n    .tm-portfolio-filters {\n        display: flex;\n\n        flex-direction: column;\n        align-items: flex-start;\n\n        flex-wrap: nowrap;\n\n        gap: 14px;\n\n        margin-bottom: 42px;\n    }\n\n    .tm-filter {\n        display: block;\n\n        width: auto;\n\n        padding: 0;\n\n        text-align: left;\n\n        font-size: 10px;\n    }\n\n    .tm-filter.active {\n        padding-left: 14px;\n    }\n\n\n    \/* GRID 2 COLUNAS *\/\n\n    .tm-portfolio-grid,\n    .tm-portfolio-grid.is-filtered {\n        display: grid !important;\n\n        grid-template-columns:\n            repeat(2, minmax(0, 1fr)) !important;\n\n        grid-template-areas: none !important;\n\n        column-gap: 30px;\n        row-gap: 55px;\n\n        align-items: start;\n\n        width: 100%;\n    }\n\n\n    \/* TODOS IGUAIS *\/\n\n    .tm-portfolio-grid .tm-project,\n    .tm-portfolio-grid.is-filtered .tm-project,\n    .tm-project--santa,\n    .tm-project--coop,\n    .tm-project--casa,\n    .tm-project--erpi {\n        grid-area: auto !important;\n\n        width: 100% !important;\n        max-width: none !important;\n\n        margin: 0 !important;\n\n        justify-self: stretch !important;\n    }\n\n\n    \/* IMAGENS IGUAIS *\/\n\n    .tm-project--santa .tm-project-image,\n    .tm-project--coop .tm-project-image,\n    .tm-project--casa .tm-project-image,\n    .tm-project--erpi .tm-project-image {\n        aspect-ratio: 1.25 \/ 1 !important;\n    }\n\n}\n\n\n\/* =====================================\n   MOBILE\n   1 ITEM POR LINHA\n===================================== *\/\n\n@media (max-width: 640px) {\n\n    .tm-portfolio {\n        padding: 0 !important;\n    }\n\n\n    \/* FILTRO VERTICAL *\/\n\n    .tm-portfolio-filters {\n        display: flex;\n\n        flex-direction: column;\n        align-items: flex-start;\n\n        flex-wrap: nowrap;\n\n        gap: 13px;\n\n        margin-bottom: 35px;\n    }\n\n    .tm-filter {\n        display: block;\n\n        width: auto;\n\n        padding: 0 !important;\n\n        font-size: 9px;\n\n        text-align: left;\n    }\n\n    .tm-filter.active {\n        padding-left: 13px !important;\n    }\n\n    .tm-filter.active::before {\n        height: 10px;\n    }\n\n\n    \/* GRID 1 COLUNA *\/\n\n    .tm-portfolio-grid,\n    .tm-portfolio-grid.is-filtered {\n        display: grid !important;\n\n        grid-template-columns: 1fr !important;\n        grid-template-areas: none !important;\n\n        gap: 45px;\n\n        width: 100%;\n    }\n\n\n    \/* TODOS IGUAIS *\/\n\n    .tm-portfolio-grid .tm-project,\n    .tm-portfolio-grid.is-filtered .tm-project,\n    .tm-project--santa,\n    .tm-project--coop,\n    .tm-project--casa,\n    .tm-project--erpi {\n        grid-area: auto !important;\n\n        width: 100% !important;\n        max-width: none !important;\n\n        margin: 0 !important;\n\n        justify-self: stretch !important;\n    }\n\n\n    \/* TODAS AS IMAGENS IGUAIS *\/\n\n    .tm-project--santa .tm-project-image,\n    .tm-project--coop .tm-project-image,\n    .tm-project--casa .tm-project-image,\n    .tm-project--erpi .tm-project-image {\n        aspect-ratio: 1.25 \/ 1 !important;\n    }\n\n}\n\n<\/style>\n\n\n<section class=\"tm-portfolio\">\n\n\n    <!-- =====================================\n         FILTROS\n    ====================================== -->\n\n    <div class=\"tm-portfolio-filters\">\n\n        <button\n            class=\"tm-filter active\"\n            type=\"button\"\n            data-filter=\"all\">\n            TODOS\n        <\/button>\n\n        <button\n            class=\"tm-filter\"\n            type=\"button\"\n            data-filter=\"equipamento\">\n            EQUIPAMENTO\n        <\/button>\n\n        <button\n            class=\"tm-filter\"\n            type=\"button\"\n            data-filter=\"espaco-publico\">\n            ESPA\u00c7O P\u00daBLICO\n        <\/button>\n\n        <button\n            class=\"tm-filter\"\n            type=\"button\"\n            data-filter=\"concursos\">\n            CONCURSOS\n        <\/button>\n\n        <button\n            class=\"tm-filter\"\n            type=\"button\"\n            data-filter=\"habitacao\">\n            HABITA\u00c7\u00c3O\n        <\/button>\n\n    <\/div>\n\n\n    <!-- =====================================\n         PROJETOS\n    ====================================== -->\n\n    <div class=\"tm-portfolio-grid\">\n\n\n        <!-- =====================================\n             PRA\u00c7A SANTA CLARA\n             NOVA IMAGEM\n        ====================================== -->\n\n        <article\n            class=\"tm-project tm-project--santa\"\n            data-category=\"espaco-publico\">\n\n            <a\n                class=\"tm-project-link\"\n                href=\"\/en\/portfolio\/praca-santa-clara-lisboa-pt\/\">\n\n                <div class=\"tm-project-image\">\n\n                    <img\n                        src=\"https:\/\/ternullomelo.com\/wp-content\/uploads\/2026\/08\/project-image-2.png\"\n                        alt=\"Pra\u00e7a Santa Clara, Lisboa, PT\"\n                        fetchpriority=\"high\"\n                        decoding=\"async\">\n\n                <\/div>\n\n\n                <div class=\"tm-project-info\">\n\n                    <span class=\"tm-project-title\">\n                        Pra\u00e7a Santa Clara, Lisboa, PT\n                    <\/span>\n\n                    <span class=\"tm-project-category\">\n                        Espa\u00e7o P\u00fablico\n                    <\/span>\n\n                <\/div>\n\n            <\/a>\n\n        <\/article>\n\n\n\n        <!-- =====================================\n             COOPERATIVA\n        ====================================== -->\n\n        <article\n            class=\"tm-project tm-project--coop\"\n            data-category=\"concursos\">\n\n            <a\n                class=\"tm-project-link\"\n                href=\"\/en\/portfolio\/cooperativa-de-habitacao-outeiro-lugar-comum-maia-pt\/\">\n\n                <div class=\"tm-project-image\">\n\n                    <img\n                        src=\"https:\/\/ternullomelo.com\/wp-content\/uploads\/2026\/08\/Cooperativa-de-Habitacao-1.png\"\n                        alt=\"Cooperativa de Habita\u00e7\u00e3o Outeiro Lugar Comum, Maia, PT\"\n                        fetchpriority=\"high\"\n                        decoding=\"async\">\n\n                <\/div>\n\n\n                <div class=\"tm-project-info\">\n\n                    <span class=\"tm-project-title\">\n                        Cooperativa de Habita\u00e7\u00e3o Outeiro Lugar Comum, Maia, PT\n                    <\/span>\n\n                    <span class=\"tm-project-category\">\n                        Concursos\n                    <\/span>\n\n                <\/div>\n\n            <\/a>\n\n        <\/article>\n\n\n\n        <!-- =====================================\n             CASA ALG\u00c9S\n             NOVA IMAGEM\n        ====================================== -->\n\n        <article\n            class=\"tm-project tm-project--casa\"\n            data-category=\"habitacao\">\n\n            <a\n                class=\"tm-project-link\"\n                href=\"\/en\/portfolio\/casa-em-alges-lisboa-pt\/\">\n\n                <div class=\"tm-project-image\">\n\n                    <img\n                        src=\"https:\/\/ternullomelo.com\/wp-content\/uploads\/2026\/08\/project-image-1.png\"\n                        alt=\"Casa em Alg\u00e9s, Lisboa, PT\"\n                        loading=\"lazy\"\n                        decoding=\"async\">\n\n                <\/div>\n\n\n                <div class=\"tm-project-info\">\n\n                    <span class=\"tm-project-title\">\n                        Casa em Alg\u00e9s, Lisboa, PT\n                    <\/span>\n\n                    <span class=\"tm-project-category\">\n                        Habita\u00e7\u00e3o\n                    <\/span>\n\n                <\/div>\n\n            <\/a>\n\n        <\/article>\n\n\n\n        <!-- =====================================\n             ERPI\n        ====================================== -->\n\n        <article\n            class=\"tm-project tm-project--erpi\"\n            data-category=\"equipamento\">\n\n            <a\n                class=\"tm-project-link\"\n                href=\"\/en\/portfolio\/erpi-castro-marim-pt\/\">\n\n                <div class=\"tm-project-image\">\n\n                    <img\n                        src=\"https:\/\/ternullomelo.com\/wp-content\/uploads\/2026\/08\/ERPI-Castro-Marim-PT-1.png\"\n                        alt=\"ERPI, Castro Marim, PT\"\n                        loading=\"lazy\"\n                        decoding=\"async\">\n\n                <\/div>\n\n\n                <div class=\"tm-project-info\">\n\n                    <span class=\"tm-project-title\">\n                        ERPI, Castro Marim, PT\n                    <\/span>\n\n                    <span class=\"tm-project-category\">\n                        Equipamento\n                    <\/span>\n\n                <\/div>\n\n            <\/a>\n\n        <\/article>\n\n\n    <\/div>\n\n<\/section>\n\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n    const portfolios =\n        document.querySelectorAll(\".tm-portfolio\");\n\n    if (!portfolios.length) {\n        return;\n    }\n\n    portfolios.forEach(function (portfolio) {\n\n        const grid =\n            portfolio.querySelector(\".tm-portfolio-grid\");\n\n        const filters =\n            portfolio.querySelectorAll(\".tm-filter\");\n\n        const projects =\n            portfolio.querySelectorAll(\".tm-project\");\n\n        if (!grid || !filters.length || !projects.length) {\n            return;\n        }\n\n\n        \/* =====================================\n           FILTRO\n        ====================================== *\/\n\n        filters.forEach(function (button) {\n\n            button.addEventListener(\"click\", function () {\n\n                const selected =\n                    button.dataset.filter;\n\n\n                \/* FILTRO ATIVO *\/\n\n                filters.forEach(function (filter) {\n\n                    filter.classList.remove(\"active\");\n\n                });\n\n\n                button.classList.add(\"active\");\n\n\n                \/* TODOS *\/\n\n                if (selected === \"all\") {\n\n                    grid.classList.remove(\n                        \"is-filtered\"\n                    );\n\n\n                    projects.forEach(function (project) {\n\n                        project.classList.remove(\n                            \"hidden\"\n                        );\n\n                    });\n\n\n                    return;\n                }\n\n\n                \/* CATEGORIA *\/\n\n                grid.classList.add(\n                    \"is-filtered\"\n                );\n\n\n                projects.forEach(function (project) {\n\n                    const category =\n                        project.dataset.category;\n\n\n                    if (category === selected) {\n\n                        project.classList.remove(\n                            \"hidden\"\n                        );\n\n                    } else {\n\n                        project.classList.add(\n                            \"hidden\"\n                        );\n\n                    }\n\n                });\n\n            });\n\n        });\n\n    });\n\n});\n<\/script><\/div><\/div><\/div><\/div><\/p>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"100-width.php","meta":{"footnotes":""},"class_list":["post-119","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ternullomelo.com\/en\/wp-json\/wp\/v2\/pages\/119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ternullomelo.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ternullomelo.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ternullomelo.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ternullomelo.com\/en\/wp-json\/wp\/v2\/comments?post=119"}],"version-history":[{"count":41,"href":"https:\/\/ternullomelo.com\/en\/wp-json\/wp\/v2\/pages\/119\/revisions"}],"predecessor-version":[{"id":333,"href":"https:\/\/ternullomelo.com\/en\/wp-json\/wp\/v2\/pages\/119\/revisions\/333"}],"wp:attachment":[{"href":"https:\/\/ternullomelo.com\/en\/wp-json\/wp\/v2\/media?parent=119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}