{"id":19,"date":"2026-03-30T11:57:54","date_gmt":"2026-03-30T11:57:54","guid":{"rendered":"https:\/\/ph-portal.zyneventures.com\/?page_id=19"},"modified":"2026-04-06T04:55:12","modified_gmt":"2026-04-06T04:55:12","slug":"dashboard","status":"publish","type":"page","link":"https:\/\/ph-portal.zyneventures.com\/","title":{"rendered":"Dashboard"},"content":{"rendered":"<style>.kadence-column19_e0e689-40 > .kt-inside-inner-col{display:flex;}.kadence-column19_e0e689-40{max-width:100%;margin-left:auto;margin-right:auto;}.wp-block-kadence-column.kb-section-dir-horizontal:not(.kb-section-md-dir-vertical)>.kt-inside-inner-col>.kadence-column19_e0e689-40{-webkit-flex:0 1 100%;flex:0 1 100%;max-width:unset;margin-left:unset;margin-right:unset;}.kadence-column19_e0e689-40 > .kt-inside-inner-col,.kadence-column19_e0e689-40 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column19_e0e689-40 > .kt-inside-inner-col{row-gap:var(--global-kb-gap-none, 0rem );column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column19_e0e689-40 > .kt-inside-inner-col{flex-direction:column;}.kadence-column19_e0e689-40 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column19_e0e689-40 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column19_e0e689-40{position:relative;}@media all and (min-width: 1025px){.wp-block-kadence-column.kb-section-dir-horizontal>.kt-inside-inner-col>.kadence-column19_e0e689-40{-webkit-flex:0 1 100%;flex:0 1 100%;max-width:unset;margin-left:unset;margin-right:unset;}}@media all and (max-width: 1024px){.kadence-column19_e0e689-40 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.wp-block-kadence-column.kb-section-sm-dir-vertical:not(.kb-section-sm-dir-horizontal):not(.kb-section-sm-dir-specificity)>.kt-inside-inner-col>.kadence-column19_e0e689-40{max-width:100%;-webkit-flex:1;flex:1;margin-left:auto;margin-right:auto;}.kadence-column19_e0e689-40 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column19_e0e689-40\"><div class=\"kt-inside-inner-col\"><style>.kb-row-layout-id19_70a710-4f > .kt-row-column-wrap{align-content:start;}:where(.kb-row-layout-id19_70a710-4f > .kt-row-column-wrap) > .wp-block-kadence-column{justify-content:start;}.kb-row-layout-id19_70a710-4f > .kt-row-column-wrap{column-gap:var(--global-kb-gap-md, 2rem);row-gap:var(--global-kb-gap-md, 2rem);padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;grid-template-columns:minmax(0, 1fr);}.kb-row-layout-id19_70a710-4f > .kt-row-layout-overlay{opacity:0.30;}@media all and (max-width: 1024px){.kb-row-layout-id19_70a710-4f > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}@media all and (max-width: 767px){.kb-row-layout-id19_70a710-4f > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}<\/style><div class=\"kb-row-layout-wrap kb-row-layout-id19_70a710-4f alignnone wp-block-kadence-rowlayout\"><div class=\"kt-row-column-wrap kt-has-1-columns kt-row-layout-equal kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top\">\n<style>.kadence-column19_f35b7e-72 > .kt-inside-inner-col,.kadence-column19_f35b7e-72 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column19_f35b7e-72 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column19_f35b7e-72 > .kt-inside-inner-col{flex-direction:column;}.kadence-column19_f35b7e-72 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column19_f35b7e-72 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column19_f35b7e-72{position:relative;}@media all and (max-width: 1024px){.kadence-column19_f35b7e-72 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column19_f35b7e-72 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column19_f35b7e-72\"><div class=\"kt-inside-inner-col\">\n<style>\n        :root {\n            --primary-blue: #0180FF;\n            --text-dark: #212529;\n            --text-muted: #8D8C9C;\n            --error-red: #D93025;\n        }\n\n        *, *::before, *::after {\n            box-sizing: border-box;\n            margin: 0;\n            padding: 0;\n        }\n\n        html, body {\n            height: 100%;\n            font-family: 'Sora', sans-serif;\n            background-color: #ffffff;\n            color: var(--text-dark);\n        }\n\n        \/* \u2500\u2500 AUTH GATE \u2500\u2500 *\/\n        #ph-auth-gate {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            min-height: 100vh;\n            background: #ffffff;\n        }\n\n        .ph-gate-spinner {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 16px;\n        }\n\n        .ph-gate-spinner .spinner {\n            width: 36px;\n            height: 36px;\n            border: 3px solid #EBF2FF;\n            border-top-color: var(--primary-blue);\n            border-radius: 50%;\n            animation: spin 0.75s linear infinite;\n        }\n\n        .ph-gate-spinner p {\n            font-size: 16px;\n            color: var(--text-muted);\n            font-weight: 300;\n        }\n\n        @keyframes spin {\n            to { transform: rotate(360deg); }\n        }\n\n        \/* \u2500\u2500 MAIN DASHBOARD \u2500\u2500 *\/\n        #ph-dashboard {\n            display: none;\n            min-height: 100vh;\n            background-color: #ffffff;\n        }\n\n        \/* \u2500\u2500 CONTENT AREA \u2500\u2500 *\/\n        .ph-content {\n            padding-top: 0px;\n            padding-left: 140px;\n            padding-right: 150px;\n\n            \/* padding: 20px 24px 40px 24px; *\/\n        }\n\n        \/* \u2500\u2500 DASHBOARD CARD \u2013 exact match to screenshot \u2500\u2500 *\/\n        .ph-dashboard-card {\n            background: #ffffff;\n            border: 1px solid #dee2e6;\n            border-radius: 4px;\n            overflow: hidden;\n        }\n\n        .ph-dashboard-card-header {\n            background-color: #f8f9fa;\n            border-bottom: 1px solid #dee2e6;\n            padding: 12px 20px;\n            font-size: 16px;\n            font-weight: 400;\n            color: var(--text-dark);\n        }\n\n        .ph-dashboard-card-body {\n            padding: 20px;\n            font-size: 16px;\n            color: var(--text-dark);\n            font-weight: 400;\n        }\n\n        \/* \u2500\u2500 RESPONSIVE \u2500\u2500 *\/\n        @media (max-width: 768px) {\n            .ph-content {\n                padding: 16px 16px 32px 16px;\n            }\n        }\n\n        @media (max-width: 480px) {\n            .ph-content {\n                padding: 12px 12px 24px 12px;\n            }\n\n            .ph-dashboard-card-header,\n            .ph-dashboard-card-body {\n                padding: 10px 14px;\n                font-size: 12px;\n            }\n        }\n    <\/style> \n\n    <!-- \u2500\u2500 AUTH GATE (loading state) \u2500\u2500 -->\n    <div id=\"ph-auth-gate\">\n        <div class=\"ph-gate-spinner\">\n            <div class=\"spinner\"><\/div>\n            <p>Verifying session\u2026<\/p>\n        <\/div>\n    <\/div>\n\n    <!-- \u2500\u2500 DASHBOARD (revealed after auth) \u2500\u2500 -->\n    <div id=\"ph-dashboard\">\n        <div class=\"ph-content\">\n            <div class=\"ph-dashboard-card\">\n                <div class=\"ph-dashboard-card-header\">Dashboard<\/div>\n                <div class=\"ph-dashboard-card-body\">You are logged in!<\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        (function () {\n            const LOGIN_URL = \"https:\/\/ph-portal.zyneventures.com\/index.php\/login\/\";\n\n            \/* \u2500\u2500 TOKEN RETRIEVAL (mirrors Login.html logic) \u2500\u2500 *\/\n            function getTokenFromCookie(name) {\n                const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n                return match ? decodeURIComponent(match[1]) : null;\n            }\n\n            function getToken() {\n                \/\/ 1. Try localStorage (primary, same as Login.html)\n                const lsToken = localStorage.getItem(\"TOKEN\");\n                if (lsToken && lsToken.trim() !== \"\") return lsToken.trim();\n\n                \/\/ 2. Fallback: cookie\n                const cookieToken = getTokenFromCookie(\"TOKEN\");\n                if (cookieToken && cookieToken.trim() !== \"\") return cookieToken.trim();\n\n                return null;\n            }\n\n            \/* \u2500\u2500 AUTH CHECK \u2500\u2500 *\/\n            function checkAuth() {\n                const token = getToken();\n\n                if (!token) {\n                    \/\/ No token \u2014 hard redirect to login, no flash of content\n                    window.location.replace(LOGIN_URL);\n                    return;\n                }\n\n                \/\/ Token exists \u2014 reveal dashboard\n                document.getElementById(\"ph-auth-gate\").style.display = \"none\";\n                document.getElementById(\"ph-dashboard\").style.display = \"block\";\n            }\n\n            \/* \u2500\u2500 RUN \u2500\u2500 *\/\n            checkAuth();\n        })();\n    <\/script>\n<\/div><\/div>\n\n<\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Verifying session\u2026 Dashboard You are logged in!<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"hide","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"hide","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":true,"_kad_post_classname":"","footnotes":""},"class_list":["post-19","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/19","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/comments?post=19"}],"version-history":[{"count":4,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/19\/revisions"}],"predecessor-version":[{"id":319,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/19\/revisions\/319"}],"wp:attachment":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/media?parent=19"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}