<style id="elementor-post-4127">.elementor-4127 .elementor-element.elementor-element-ec32359{--display:grid;--e-con-grid-template-columns:repeat(2, 1fr);--e-con-grid-template-rows:repeat(1, 1fr);--grid-auto-flow:row;--justify-items:end;--align-items:center;}.elementor-4127 .elementor-element.elementor-element-ec32359:not(.elementor-motion-effects-element-type-background), .elementor-4127 .elementor-element.elementor-element-ec32359 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-image:url("https://tudengifond.ee/wp-content/uploads/2026/09/taltech1.jpg");background-position:-165px 530px;}.elementor-4127 .elementor-element.elementor-element-ec32359.e-con{--align-self:center;}.elementor-4127 .elementor-element.elementor-element-da7c71d{width:var( --container-widget-width, 104.585% );max-width:104.585%;--container-widget-width:104.585%;--container-widget-flex-grow:0;text-align:start;}.elementor-4127 .elementor-element.elementor-element-da7c71d.elementor-element{--flex-grow:0;--flex-shrink:0;}.elementor-4127 .elementor-element.elementor-element-da7c71d .elementor-heading-title{color:var( --e-global-color-accent );}.elementor-4127 .elementor-element.elementor-element-d6d1bcf{--display:flex;--justify-content:center;}.elementor-4127 .elementor-element.elementor-element-e4cc6be{--display:flex;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:center;--align-items:center;border-style:solid;--border-style:solid;border-width:1px 1px 1px 1px;--border-top-width:1px;--border-right-width:1px;--border-bottom-width:1px;--border-left-width:1px;border-color:var( --e-global-color-accent );--border-color:var( --e-global-color-accent );--border-radius:5px 5px 5px 5px;--padding-top:1rem;--padding-bottom:1rem;--padding-left:1rem;--padding-right:1rem;}.elementor-4127 .elementor-element.elementor-element-e4cc6be:not(.elementor-motion-effects-element-type-background), .elementor-4127 .elementor-element.elementor-element-e4cc6be > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:var( --e-global-color-accent );}.elementor-4127 .elementor-element.elementor-element-e4cc6be.e-con{--align-self:flex-end;--flex-grow:0;--flex-shrink:0;}.elementor-4127 .elementor-element.elementor-element-0afcd04{--display:flex;}.elementor-4127 .elementor-element.elementor-element-3b20d0a{width:var( --container-widget-width, 100% );max-width:100%;--container-widget-width:100%;--container-widget-flex-grow:0;}.elementor-4127 .elementor-element.elementor-element-3b20d0a > .elementor-widget-container{margin:0 0 -2rem 0;}.elementor-4127 .elementor-element.elementor-element-3b20d0a.elementor-element{--align-self:center;}.elementor-4127 .elementor-element.elementor-element-9c5d6f0{--display:flex;}.elementor-4127 .elementor-element.elementor-element-6271bef{--spacer-size:50px;}.elementor-4127 .elementor-element.elementor-element-5f4c1a3{--display:flex;}.elementor-4127 .elementor-element.elementor-element-2101a5b{--display:flex;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:center;--align-items:stretch;--gap:1rem 1rem;--row-gap:1rem;--column-gap:1rem;--flex-wrap:wrap;--align-content:flex-start;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-4127 .elementor-element.elementor-element-3a7164f{--display:flex;--min-height:-;--flex-direction:column;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--align-items:stretch;border-style:solid;--border-style:solid;border-width:1px 1px 1px 1px;--border-top-width:1px;--border-right-width:1px;--border-bottom-width:1px;--border-left-width:1px;border-color:var( --e-global-color-accent );--border-color:var( --e-global-color-accent );--border-radius:4px 4px 4px 4px;--padding-top:2%;--padding-bottom:2%;--padding-left:2%;--padding-right:2%;}.elementor-4127 .elementor-element.elementor-element-3a7164f.e-con{--flex-grow:1;--flex-shrink:0;}.elementor-4127 .elementor-element.elementor-element-bc41f5d{width:var( --container-widget-width, 597.258 );max-width:597.258;--container-widget-width:597.258;--container-widget-flex-grow:0;}.elementor-4127 .elementor-element.elementor-element-bc41f5d.elementor-element{--flex-grow:0;--flex-shrink:0;}.elementor-4127 .elementor-element.elementor-element-c3fc563{--display:flex;}.elementor-4127 .elementor-element.elementor-element-5453fba{--spacer-size:50px;}.elementor-4127 .elementor-element.elementor-element-596d4ce{--display:flex;}.elementor-4127 .elementor-element.elementor-element-54e9fc8{--display:flex;}.elementor-4127 .elementor-element.elementor-element-5d22a9c{--display:flex;--align-items:stretch;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );border-style:solid;--border-style:solid;border-width:1px 1px 1px 1px;--border-top-width:1px;--border-right-width:1px;--border-bottom-width:1px;--border-left-width:1px;border-color:var( --e-global-color-accent );--border-color:var( --e-global-color-accent );--border-radius:5px 5px 5px 5px;--padding-top:2%;--padding-bottom:2%;--padding-left:2%;--padding-right:2%;}.elementor-4127 .elementor-element.elementor-element-5d22a9c:not(.elementor-motion-effects-element-type-background), .elementor-4127 .elementor-element.elementor-element-5d22a9c > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:var( --e-global-color-e8ec877 );}.elementor-4127 .elementor-element.elementor-element-6b28f2d{width:var( --container-widget-width, auto );max-width:auto;--container-widget-width:auto;--container-widget-flex-grow:0;text-align:center;}.elementor-4127 .elementor-element.elementor-element-6b28f2d.elementor-element{--align-self:center;}.elementor-4127 .elementor-element.elementor-element-6b28f2d .elementor-heading-title{font-family:var( --e-global-typography-284131a-font-family ), Sans-serif;font-size:var( --e-global-typography-284131a-font-size );font-weight:var( --e-global-typography-284131a-font-weight );line-height:var( --e-global-typography-284131a-line-height );color:var( --e-global-color-text );}.elementor-4127 .elementor-element.elementor-element-79782aa{width:var( --container-widget-width, auto );max-width:auto;--container-widget-width:auto;--container-widget-flex-grow:0;}.elementor-4127 .elementor-element.elementor-element-79782aa.elementor-element{--flex-grow:0;--flex-shrink:0;}.elementor-4127 .elementor-element.elementor-element-58e8de8{--spacer-size:50px;}@media(max-width:1024px){.elementor-4127 .elementor-element.elementor-element-ec32359{--grid-auto-flow:row;}.elementor-4127 .elementor-element.elementor-element-ec32359:not(.elementor-motion-effects-element-type-background), .elementor-4127 .elementor-element.elementor-element-ec32359 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-position:0px 800px;}.elementor-4127 .elementor-element.elementor-element-e4cc6be{--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--align-items:flex-start;}.elementor-4127 .elementor-element.elementor-element-e4cc6be.e-con{--align-self:center;}.elementor-4127 .elementor-element.elementor-element-3a7164f{--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--padding-top:2%;--padding-bottom:2%;--padding-left:2%;--padding-right:2%;}.elementor-4127 .elementor-element.elementor-element-6b28f2d .elementor-heading-title{font-size:var( --e-global-typography-284131a-font-size );line-height:var( --e-global-typography-284131a-line-height );}.elementor-4127 .elementor-element.elementor-element-79782aa{--container-widget-width:100%;--container-widget-flex-grow:0;width:var( --container-widget-width, 100% );max-width:100%;}}@media(max-width:767px){.elementor-4127 .elementor-element.elementor-element-ec32359{--e-con-grid-template-columns:repeat(1, 1fr);--e-con-grid-template-rows:repeat(1, 1fr);--grid-auto-flow:row;--justify-items:center;--align-items:center;}.elementor-4127 .elementor-element.elementor-element-ec32359:not(.elementor-motion-effects-element-type-background), .elementor-4127 .elementor-element.elementor-element-ec32359 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-position:-78px 800px;}.elementor-4127 .elementor-element.elementor-element-ec32359.e-con{--align-self:center;}.elementor-4127 .elementor-element.elementor-element-da7c71d{text-align:center;}.elementor-4127 .elementor-element.elementor-element-e4cc6be{--width:174.2;}.elementor-4127 .elementor-element.elementor-element-3a7164f{--padding-top:2%;--padding-bottom:2%;--padding-left:2%;--padding-right:2%;}.elementor-4127 .elementor-element.elementor-element-6b28f2d .elementor-heading-title{font-size:var( --e-global-typography-284131a-font-size );line-height:var( --e-global-typography-284131a-line-height );}}@media(min-width:768px){.elementor-4127 .elementor-element.elementor-element-e4cc6be{--width:auto;}.elementor-4127 .elementor-element.elementor-element-3a7164f{--width:auto;}.elementor-4127 .elementor-element.elementor-element-5d22a9c{--width:auto;}}@media(max-width:1024px) and (min-width:768px){.elementor-4127 .elementor-element.elementor-element-3a7164f{--width:100%;}.elementor-4127 .elementor-element.elementor-element-5d22a9c{--width:100%;}}@media(min-width:2400px){.elementor-4127 .elementor-element.elementor-element-ec32359{--grid-auto-flow:row;}.elementor-4127 .elementor-element.elementor-element-ec32359:not(.elementor-motion-effects-element-type-background), .elementor-4127 .elementor-element.elementor-element-ec32359 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-position:800px 800px;}.elementor-4127 .elementor-element.elementor-element-6b28f2d .elementor-heading-title{font-size:var( --e-global-typography-284131a-font-size );line-height:var( --e-global-typography-284131a-line-height );}}/* Start custom CSS for container, class: .elementor-element-3a7164f */.varade_jaotus {
    min-width: ;
}/* End custom CSS */</style>{"id":4127,"date":"2025-03-06T15:27:54","date_gmt":"2025-03-06T13:27:54","guid":{"rendered":"https:\/\/tudengifond.ee\/portfolio\/"},"modified":"2026-10-09T12:12:46","modified_gmt":"2026-10-09T10:12:46","slug":"portfolio","status":"publish","type":"page","link":"https:\/\/tudengifond.ee\/en\/portfolio\/","title":{"rendered":"Portfolio"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4127\" class=\"elementor elementor-4127 elementor-92\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ec32359 e-grid e-con-boxed e-con e-parent\" data-id=\"ec32359\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-da7c71d elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"da7c71d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">TALTECH STUDENT FUND PORTFOLIO<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d6d1bcf e-con-full e-flex e-con e-child\" data-id=\"d6d1bcf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-e4cc6be e-con-full e-flex e-con e-child\" data-id=\"e4cc6be\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-0afcd04 e-con-full e-flex e-con e-child\" data-id=\"0afcd04\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3b20d0a elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"3b20d0a\" 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<div>\r\n\r\n\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <style>\r\n        .summary {\r\n            display: inline !important;\r\n            width: auto;\r\n            min-width: 100px;\r\n            max-width: 520px;\r\n            font-family: \"Proxima Nova\", sans-serif;\r\n            text-align: right;\r\n            align-items: center!;\r\n        }\r\n\r\n        .summary__title {\r\n            font-size: 1rem;\r\n            font-weight: 600;\r\n            color: hsla(0, 0%, 0%, 0.8);           \r\n            margin-bottom: 0.6rem;\r\n            line-height: 1.4;\r\n        }\r\n\r\n        .summary__figure {\r\n            font-size: 3rem;\r\n            font-weight: 800;\r\n            color: hsla(0, 0%, 0%, 0.8);\r\n            line-height: 1.2;\r\n        }\r\n    <\/style>\r\n\r\n\r\n<section class=\"summary\" data-endpoint=\"\/wp-json\/portfellow\/v1\/public-summary\">\r\n    <p class=\"summary__title\">Total return:<\/p>\r\n    <p id=\"pfSummaryFigure\" class=\"summary__figure\">\u2014<\/p>\r\n<\/section>\r\n\r\n<script>\r\n(function () {\r\n    const section = document.querySelector('.summary');\r\n    if (!section) return;\r\n\r\n    const figureEl = section.querySelector('#pfSummaryFigure');\r\n    const endpoint = section.dataset.endpoint || '\/wp-json\/portfellow\/v1\/public-summary';\r\n\r\n    function formatPercent(value) {\r\n        return (typeof value === 'number' && !Number.isNaN(value) ? value : 0).toFixed(2) + '%';\r\n    }\r\n\r\n    async function load() {\r\n        if (figureEl) {\r\n            figureEl.textContent = '\u2026';\r\n        }\r\n        try {\r\n            const response = await fetch(endpoint, { cache: 'no-store' });\r\n            if (!response.ok) throw new Error('HTTP ' + response.status);\r\n            const payload = await response.json();\r\n            const rate = typeof payload.returnRatePercent === 'number'\r\n                ? payload.returnRatePercent\r\n                : 0;\r\n\r\n            if (figureEl) {\r\n                figureEl.textContent = formatPercent(rate);\r\n            }\r\n        } catch (error) {\r\n            console.error('[Portfellow Summary]', error);\r\n            if (figureEl) {\r\n                figureEl.textContent = '\u2014';\r\n            }\r\n        }\r\n    }\r\n\r\n    if (document.readyState === 'loading') {\r\n        document.addEventListener('DOMContentLoaded', load);\r\n    } else {\r\n        load();\r\n    }\r\n})();\r\n<\/script>\r\n\r\n\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9c5d6f0 e-flex e-con-boxed e-con e-parent\" data-id=\"9c5d6f0\" 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-6271bef elementor-widget elementor-widget-spacer\" data-id=\"6271bef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5f4c1a3 e-con-full e-flex e-con e-child\" data-id=\"5f4c1a3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-2101a5b e-con-full e-flex e-con e-child\" data-id=\"2101a5b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fe9f56a elementor-widget elementor-widget-heading\" data-id=\"fe9f56a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Asset allocation:<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3a7164f e-con-full varade_jaotus e-flex e-con e-child\" data-id=\"3a7164f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bc41f5d elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"bc41f5d\" 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<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><title>Portfellow Allocation<\/title><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><style>.allocation {\r\n            display: flex;\r\n            flex-direction: row;\r\n            flex-wrap: wrap;\r\n            justify-content: center;\r\n            align-items: center;\r\n            gap: 2rem;\r\n            text-align: left;\r\n}\r\n\r\n        .allocation__chart {\r\n            width: 100%;\r\n            max-width: 420px;\r\n            position: relative;\r\n            font-family: \"Proxima Nova\", sans-serif;\r\n        }\r\n\r\n        .allocation__chart canvas {\r\n            width: 100% !important;\r\n            height: auto !important;\r\n            font-family: \"Proxima Nova\", sans-serif;\r\n        }\r\n\r\n        .allocation__legend {\r\n            width: 100%;\r\n            max-width: 350px;\r\n            margin: 0;\r\n            padding: 0;\r\n            list-style: none;\r\n            display: grid;\r\n            gap: 0.5rem;\r\n            justify-items: left;     \r\n}\r\n\r\n        .allocation__legend li {\r\n            width: 100%;\r\n            display: grid;\r\n            grid-template-columns: 1fr auto; \r\n            align-items: center;\r\n            column-gap: 2rem;\r\n            font-weight: 400;\r\n            color: #0f172a;\r\n}\r\n\r\n        .allocation__label {\r\n            display: inline-flex;\r\n            align-items: center;\r\n            gap: 1rem;\r\n        }\r\n\r\n        .allocation__dot {\r\n            width: 14px;\r\n            height: 14px;\r\n            border-radius: 50%;\r\n            background: var(--dot-color, #4f6d7a);\r\n        }\r\n\r\n        .allocation__percent {\r\n            font-variant-numeric: tabular-nums;\r\n            font-weight: 600;\r\n        }\r\n\r\n        .status {\r\n            margin: 0;\r\n            font-size: 0.9rem;\r\n            color: #475569;\r\n            text-align: center;\r\n        }\r\n\r\n        @media (min-width: 720px) {\r\n            .allocation {\r\n                flex-direction: row;\r\n                align-items: center;\r\n                gap: 2rem;\r\n            }\r\n\r\n            .allocation__chart {\r\n                flex: 0 0 320px;\r\n            }\r\n\r\n            .allocation__legend {\r\n                flex: 1;\r\n            }\r\n\r\n            .status {\r\n                text-align: left;\r\n            }\r\n        }\r\n    <\/style><script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"><\/script><\/head><body><section class=\"allocation\" data-endpoint=\"\/wp-json\/portfellow\/v1\/public-summary\"><div class=\"allocation__chart\"><canvas id=\"pfAllocationChart\" aria-label=\"Portfolio allocation\" role=\"img\"><\/canvas><\/div><ul id=\"pfAllocationLegend\" class=\"allocation__legend\" aria-live=\"polite\"><\/ul><p id=\"pfAllocationStatus\" class=\"status\" role=\"status\"><\/p><\/section><script>(function () {\r\n            const palette = [\r\n                '#2563eb', '#0ea5e9', '#14b8a6', '#10b981', '#22c55e', '#84cc16',\r\n                '#facc15', '#f97316', '#fb7185', '#f472b6', '#c084fc', '#a78bfa',\r\n                '#8b5cf6', '#38bdf8'\r\n            ];\r\n            let chartInstance = null;\r\n\r\n            const labelPlugin = {\r\n                id: 'pfAllocationLabels',\r\n                afterDatasetsDraw(chart) {\r\n                    const {ctx} = chart;\r\n                    const meta = chart.getDatasetMeta(0);\r\n                    if (!meta) return;\r\n                    ctx.save();\r\n                    meta.data.forEach((arc, index) => {\r\n                        const value = chart.data.datasets[0].data[index];\r\n                        if (typeof value !== 'number' || value <= 0) {\r\n                            return;\r\n                        }\r\n                        const pos = arc.tooltipPosition();\r\n                        ctx.fillStyle = '#0f172a';\r\n                        ctx.font = '400 12px \"Proxima Nova\", sans-serif';\r\n                        ctx.textAlign = 'center';\r\n                        ctx.textBaseline = 'middle';\r\n                        ctx.fillText(value.toFixed(1) + '%', pos.x, pos.y);\r\n                    });\r\n                    ctx.restore();\r\n                },\r\n            };\r\n\r\n            function formatPercent(value) {\r\n                return (typeof value === 'number' && !Number.isNaN(value) ? value : 0).toFixed(2) + '%';\r\n            }\r\n\r\n            function updateStatus(statusEl, message = '', isError = false) {\r\n                if (!statusEl) {\r\n                    return;\r\n                }\r\n                statusEl.textContent = message;\r\n                statusEl.style.color = isError ? '#b91c1c' : '#475569';\r\n                statusEl.style.display = message ? 'block' : 'none';\r\n            }\r\n\r\n            function renderLegend(legendEl, allocation) {\r\n                if (!legendEl) {\r\n                    return;\r\n                }\r\n\r\n                legendEl.innerHTML = '';\r\n                allocation.forEach((item, index) => {\r\n                    const li = document.createElement('li');\r\n                    const label = document.createElement('span');\r\n                    const dot = document.createElement('span');\r\n                    const percent = document.createElement('span');\r\n\r\n                    dot.className = 'allocation__dot';\r\n                    dot.style.setProperty('--dot-color', palette[index % palette.length]);\r\n\r\n                    label.className = 'allocation__label';\r\n                    label.appendChild(dot);\r\n                    label.appendChild(document.createTextNode(item.name));\r\n\r\n                    percent.className = 'allocation__percent';\r\n                    percent.textContent = formatPercent(item.percent ?? 0);\r\n\r\n                    li.appendChild(label);\r\n                    li.appendChild(percent);\r\n                    legendEl.appendChild(li);\r\n                });\r\n            }\r\n\r\n            function renderChart(chartCanvas, allocation) {\r\n                if (!chartCanvas) {\r\n                    return;\r\n                }\r\n\r\n                const data = allocation.map((item) => Number(item.percent ?? 0));\r\n                const labels = allocation.map((item) => item.name);\r\n\r\n                if (chartInstance) {\r\n                    chartInstance.destroy();\r\n                }\r\n\r\n                Chart.register(labelPlugin);\r\n                chartInstance = new Chart(chartCanvas.getContext('2d'), {\r\n                    type: 'doughnut',\r\n                    data: {\r\n                        labels,\r\n                        datasets: [\r\n                            {\r\n                                data,\r\n                                backgroundColor: data.map((_, index) => palette[index % palette.length]),\r\n                                borderWidth: 0,\r\n                            },\r\n                        ],\r\n                    },\r\n                    options: {\r\n                        plugins: {\r\n                            legend: { display: false },\r\n                            tooltip: {\r\n                                callbacks: {\r\n                                    label(context) {\r\n                                        const value = typeof context.parsed === 'number' ? context.parsed : 0;\r\n                                        return `${context.label}: ${value.toFixed(2)}%`;\r\n                                    },\r\n                                },\r\n                            },\r\n                        },\r\n                        cutout: '45%',\r\n                        responsive: true,\r\n                        maintainAspectRatio: false,\r\n                    },\r\n                    plugins: [labelPlugin],\r\n                });\r\n            }\r\n\r\n            async function init() {\r\n                const section = document.querySelector('.allocation');\r\n                if (!section) {\r\n                    return;\r\n                }\r\n\r\n                const chartCanvas = section.querySelector('#pfAllocationChart');\r\n                const legendEl = section.querySelector('#pfAllocationLegend');\r\n                const statusEl = section.querySelector('#pfAllocationStatus');\r\n                const endpoint = section.dataset.endpoint || '\/wp-json\/portfellow\/v1\/public-summary';\r\n\r\n                updateStatus(statusEl, 'Loading allocation\u2026');\r\n\r\n                try {\r\n                    const response = await fetch(endpoint, { cache: 'no-store' });\r\n                    if (!response.ok) {\r\n                        throw new Error(`HTTP ${response.status}`);\r\n                    }\r\n\r\n                    const payload = await response.json();\r\n                    const allocation = Array.isArray(payload.allocation)\r\n                        ? payload.allocation.filter((item) => item.percent > 0)\r\n                        : [];\r\n\r\n                    if (!allocation.length) {\r\n                        updateStatus(statusEl, 'Allocation data unavailable.', true);\r\n                        return;\r\n                    }\r\n\r\n                    renderChart(chartCanvas, allocation);\r\n                    renderLegend(legendEl, allocation);\r\n                    updateStatus(statusEl, '');\r\n                } catch (error) {\r\n                    console.error('[Portfellow Allocation]', error);\r\n                    updateStatus(statusEl, 'Failed to load allocation data.', true);\r\n                }\r\n            }\r\n\r\n            if (document.readyState === 'loading') {\r\n                document.addEventListener('DOMContentLoaded', init);\r\n            } else {\r\n                init();\r\n            }\r\n        })();\r\n    <\/script><\/body><\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c3fc563 e-flex e-con-boxed e-con e-parent\" data-id=\"c3fc563\" 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-5453fba elementor-widget elementor-widget-spacer\" data-id=\"5453fba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-596d4ce e-flex e-con-boxed e-con e-parent\" data-id=\"596d4ce\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-54e9fc8 e-con-full e-flex e-con e-child\" data-id=\"54e9fc8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-5d22a9c e-con-full e-flex e-con e-child\" data-id=\"5d22a9c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6b28f2d elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"6b28f2d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Returns since initial investment:<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79782aa elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"79782aa\" 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<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><style>.performance {\r\n            width: ;\r\n            margin: 0;\r\n            padding: 0;\r\n            color: #0f172a;\r\n            font-family: \"Proxima Nova\", sans-serif;\r\n        }\r\n\r\n        .performance__name {\r\n            display: inline-flex;\r\n            align-items: center;\r\n            gap: 0.6rem;\r\n        }\r\n\r\n        .performance__logo {\r\n            width: 28px;\r\n            height: 28px;\r\n            border-radius: 50%;\r\n            object-fit: cover;\r\n            background: #f8fafc;\r\n            display: block;\r\n        }\r\n\r\n\r\n\r\n        .performance__table {\r\n            width: 100%;\r\n            border-collapse: separate;\r\n            border-spacing: 0;\r\n            font-size: 0.95rem;\r\n            background: rgba(255, 255, 255, 0.85);\r\n            border: none;\r\n            border-radius: 18px;\r\n            overflow: hidden;\r\n            box-shadow: 0 28px 55px -25px rgba(15, 23, 42, 0.4);\r\n            \r\n        }\r\n\r\n        .performance__table th,\r\n        .performance__table td {\r\n            text-align: left;\r\n            padding: 0.85rem 1rem;\r\n            border: none;\r\n        }\r\n\r\n        .performance__table thead {\r\n            border-bottom: 1px solid rgba(148, 163, 184, 0.35);\r\n        }\r\n\r\n        .performance__table thead th {\r\n            font-size: 0.78rem;\r\n            text-transform: uppercase;\r\n            font-weight: 600;\r\n            color: #475569;\r\n            border-block-start: none !important;\r\n            border-top: none;\r\n        }\r\n\r\n        .performance__table tbody tr {\r\n            transition: background 0.2s ease, transform 0.2s ease;\r\n        }\r\n\r\n        .performance__table tbody tr:hover {\r\n            background: rgba(15, 23, 42, 0.03);\r\n        }\r\n\r\n        .performance__table tbody tr:last-child td {\r\n            border-bottom: none;\r\n        }\r\n\r\n        .performance__table td:last-child,\r\n        .performance__table th:last-child {\r\n            text-align: right;\r\n        }\r\n\r\n        .performance__table td:first-child {\r\n            font-weight: 400;\r\n        }\r\n\r\n        .change {\r\n            display: inline-flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            min-width: 4rem;\r\n            padding: 0.3rem 0.75rem;\r\n            border-radius: 999px;\r\n            font-weight: 600;\r\n            font-size: 0.9rem;\r\n            background: #e2e8f0;\r\n            color: #0f172a;\r\n            box-shadow: inset 0 0 0 1px rgba(15, 23, 42, 0.08);\r\n        }\r\n\r\n        .change--positive {\r\n            background: linear-gradient(135deg, rgba(34, 197, 94, 0.15), rgba(74, 222, 128, 0.25));\r\n            color: #15803d;\r\n            box-shadow: inset 0 0 0 1px rgba(34, 197, 94, 0.25);\r\n        }\r\n\r\n        .change--negative {\r\n            background: linear-gradient(135deg, rgba(248, 113, 113, 0.2), rgba(248, 113, 113, 0.1));\r\n            color: #b91c1c;\r\n            box-shadow: inset 0 0 0 1px rgba(239, 68, 68, 0.25);\r\n        }\r\n\r\n        .change--neutral {\r\n            background: linear-gradient(135deg, rgba(148, 163, 184, 0.25), rgba(148, 163, 184, 0.15));\r\n            color: #475569;\r\n            box-shadow: inset 0 0 0 1px rgba(148, 163, 184, 0.4);\r\n        }\r\n\r\n        .status {\r\n            margin-top: 1rem;\r\n            font-size: 0.9rem;\r\n            color: #475569;\r\n            text-align: center;\r\n        }\r\n\r\n        @media (max-width: 560px) {\r\n            .performance {\r\n                padding: 0 0.25rem;\r\n            }\r\n\r\n            .performance__table {\r\n                min-width: 100%;\r\n                border-spacing: 0;\r\n                background: transparent;\r\n                box-shadow: none;\r\n            }\r\n\r\n            .performance__table thead {\r\n                display: none;\r\n            }\r\n\r\n            .performance__table tbody tr {\r\n                display: flex;\r\n                flex-direction: column;\r\n                gap: 0.35rem;\r\n                padding: 0.85rem;\r\n                margin-top: 10px;\r\n                border: 1px solid #e2e8f0;\r\n                border-radius: 14px;\r\n                margin-bottom: 0.75rem;\r\n                background: transparent;\r\n            }\r\n\r\n            .performance__table tbody tr:hover {\r\n                transform: translateY(-1px);\r\n                background: rgba(248, 250, 252, 1);\r\n            }\r\n            \r\n\r\n            .performance__table td {\r\n                width: 100%;\r\n                border: 0;\r\n                padding: 0.2rem 0;\r\n                text-align: left;\r\n                background: transparent !important;\r\n            }\r\n\r\n            .performance__table td::before {\r\n                content: attr(data-label);\r\n                display: block;\r\n                font-size: 0.72rem;\r\n                letter-spacing: 0.08em;\r\n                color: #94a3b8;\r\n                text-transform: uppercase;\r\n                margin-bottom: 0.15rem;\r\n            }\r\n\r\n            .performance__table td:last-child {\r\n                text-align: left;\r\n            }\r\n\r\n            .change {\r\n                min-width: 0;\r\n                align-self: flex-start;\r\n            }\r\n        }\r\n    <\/style><\/head><body><section class=\"performance\" data-endpoint=\"\/wp-json\/portfellow\/v1\/public-summary\"><table class=\"performance__table\"><thead><tr><th scope=\"col\">Positsioon<\/th><th scope=\"col\">Kogu muutus (%)<\/th><\/tr><\/thead><tbody id=\"pfPerformanceRows\"><\/tbody><\/table><p id=\"pfPerformanceStatus\" class=\"status\" role=\"status\"><\/p><\/section><script>(function () {\r\n            function formatPercent(value) {\r\n                return (typeof value === 'number' && !Number.isNaN(value) ? value : 0).toFixed(2) + '%';\r\n            }\r\n\r\n            function changeClass(value) {\r\n                if (value > 0) return 'change change--positive';\r\n                if (value < 0) return 'change change--negative';\r\n                return 'change change--neutral';\r\n            }\r\n\r\n            function init() {\r\n                const section = document.querySelector('.performance');\r\n                if (!section) return;\r\n\r\n                const rowsEl = section.querySelector('#pfPerformanceRows');\r\n                const statusEl = section.querySelector('#pfPerformanceStatus');\r\n                const endpoint = section.dataset.endpoint || '\/wp-json\/portfellow\/v1\/public-summary';\r\n\r\n                function updateStatus(message = '', isError = false) {\r\n                    if (!statusEl) return;\r\n                    statusEl.textContent = message;\r\n                    statusEl.style.color = isError ? '#b91c1c' : '#475569';\r\n                    statusEl.style.display = message ? 'block' : 'none';\r\n                }\r\n\r\n                function renderRows(performance) {\r\n                    if (!rowsEl) return;\r\n                    rowsEl.innerHTML = '';\r\n                    performance.forEach((item) => {\r\n                        const tr = document.createElement('tr');\r\n                        const nameTd = document.createElement('td');\r\n                        const changeTd = document.createElement('td');\r\n                        const badge = document.createElement('span');\r\n\r\n                        nameTd.dataset.label = 'Positsioon';\r\n                        changeTd.dataset.label = 'Kogu muutus (%)';\r\n\r\n                        const nameWrapper = document.createElement('span');\r\n                        nameWrapper.className = 'performance__name';\r\n\r\n                        if (item.logo) {\r\n                            const logo = document.createElement('img');\r\n                            logo.className = 'performance__logo';\r\n                            logo.src = item.logo;\r\n                            logo.alt = item.name;\r\n                            logo.loading = 'lazy';\r\n                            nameWrapper.appendChild(logo);\r\n                        }\r\n\r\n                        const label = document.createElement('span');\r\n                        label.textContent = item.name;\r\n                        nameWrapper.appendChild(label);\r\n\r\n                        nameTd.appendChild(nameWrapper);\r\n                        const value = typeof item.changePercent === 'number' ? item.changePercent : 0;\r\n                        badge.className = changeClass(value);\r\n                        badge.textContent = formatPercent(value);\r\n\r\n                        changeTd.appendChild(badge);\r\n                        tr.appendChild(nameTd);\r\n                        tr.appendChild(changeTd);\r\n                        rowsEl.appendChild(tr);\r\n                    });\r\n                }\r\n\r\n                async function load() {\r\n                    updateStatus('Loading performance\u2026');\r\n                    try {\r\n                        const response = await fetch(endpoint, { cache: 'no-store' });\r\n                        if (!response.ok) throw new Error(`HTTP ${response.status}`);\r\n                        const payload = await response.json();\r\n                        const performance = Array.isArray(payload.performance) ? payload.performance : [];\r\n                        if (!performance.length) {\r\n                            updateStatus('Performance data unavailable.', true);\r\n                            return;\r\n                        }\r\n                        renderRows(performance);\r\n                        updateStatus('');\r\n                    } catch (error) {\r\n                        console.error('[Portfellow Performance]', error);\r\n                        updateStatus('Failed to load performance data.', true);\r\n                    }\r\n                }\r\n\r\n                load();\r\n            }\r\n\r\n            if (document.readyState === 'loading') {\r\n                document.addEventListener('DOMContentLoaded', init);\r\n            } else {\r\n                init();\r\n            }\r\n        })();\r\n    <\/script><\/body><\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-58e8de8 elementor-widget elementor-widget-spacer\" data-id=\"58e8de8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>TALTECH STUDENT FUND PORTFOLIO Total return: \u2014 Asset allocation: Portfellow Allocation Returns since initial investment: Positsioon Kogu muutus (%)<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_seopress_titles_title":"%%post_title%% %%sep%% Investments made by %%sitetitle%%","_seopress_titles_desc":"View TalTech Student Fund's investments transparently! Explore our portfolio, financial results, and charts. Learn about investing with students.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"https:\/\/tudengifond.ee\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-13-at-11.30.55.png","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"https:\/\/tudengifond.ee\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-13-at-11.30.55.png","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","iawp_total_views":52,"footnotes":""},"class_list":["post-4127","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/tudengifond.ee\/en\/wp-json\/wp\/v2\/pages\/4127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tudengifond.ee\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tudengifond.ee\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tudengifond.ee\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tudengifond.ee\/en\/wp-json\/wp\/v2\/comments?post=4127"}],"version-history":[{"count":3,"href":"https:\/\/tudengifond.ee\/en\/wp-json\/wp\/v2\/pages\/4127\/revisions"}],"predecessor-version":[{"id":5074,"href":"https:\/\/tudengifond.ee\/en\/wp-json\/wp\/v2\/pages\/4127\/revisions\/5074"}],"wp:attachment":[{"href":"https:\/\/tudengifond.ee\/en\/wp-json\/wp\/v2\/media?parent=4127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}