{"id":2900,"date":"2026-08-27T03:33:57","date_gmt":"2026-08-27T03:33:57","guid":{"rendered":"https:\/\/ethiosearch.com\/directory\/?page_id=2900"},"modified":"2026-08-30T20:45:38","modified_gmt":"2026-08-30T20:45:38","slug":"meet-the-2026-nominees","status":"publish","type":"page","link":"https:\/\/ethiosearch.com\/directory\/meet-the-2026-nominees\/","title":{"rendered":"Meet the 2026 Nominees"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2900\" class=\"elementor elementor-2900\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6255fdb e-flex e-con-boxed e-con e-parent\" data-id=\"6255fdb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-95a3ff9 e-con e-atomic-element e-flexbox-base e-89ef690 \" data-id=\"95a3ff9\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"95a3ff9\" data-e-type=\"e-flexbox\" data-id=\"95a3ff9\">\n    <div class=\"elementor-element elementor-element-f6624ee e-flex e-con-boxed e-con e-parent\" data-id=\"f6624ee\" 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-1a3a5ab elementor-widget elementor-widget-html\" data-id=\"1a3a5ab\" 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<style>\n\/* =========================================================\n   ETHIOSEARCH PEOPLE'S AWARDS 2026\n   DYNAMIC LISTINGPRO NOMINEE PAGE\n   ========================================================= *\/\n\n.ethio-awards-page {\n    --es-red: #f71946;\n    --es-red-dark: #d90f38;\n    --es-orange: #e99b00;\n    --es-dark: #172033;\n    --es-gray: #667085;\n    --es-light: #f7f8fa;\n    --es-border: #e7eaf0;\n\n    font-family: Arial, Helvetica, sans-serif;\n    color: var(--es-dark);\n    background: #ffffff;\n    padding: 0 20px 70px;\n}\n\n.ethio-awards-page *,\n.ethio-awards-page *::before,\n.ethio-awards-page *::after {\n    box-sizing: border-box;\n}\n\n\n\/* =========================================================\n   HERO\n   ========================================================= *\/\n\n.ethio-awards-hero {\n    max-width: 1180px;\n    margin: 0 auto 45px;\n    padding: 65px 30px;\n    border-radius: 24px;\n\n    background:\n        linear-gradient(\n            135deg,\n            rgba(247,25,70,.97),\n            rgba(205,18,61,.94)\n        );\n\n    text-align: center;\n    color: #ffffff;\n\n    box-shadow:\n        0 15px 45px rgba(23,32,51,.12);\n}\n\n.ethio-awards-trophy {\n    display: inline-block;\n    margin-bottom: 15px;\n\n    color: #ffffff;\n    font-size: 15px;\n    font-weight: 700;\n    letter-spacing: .7px;\n    text-transform: uppercase;\n}\n\n.ethio-awards-hero h1 {\n    max-width: 900px;\n    margin: 0 auto 16px;\n\n    color: #ffffff !important;\n\n    font-size: clamp(34px, 5vw, 58px);\n    line-height: 1.08;\n    font-weight: 800;\n}\n\n.ethio-awards-hero p {\n    max-width: 760px;\n    margin: 0 auto;\n\n    color: rgba(255,255,255,.94) !important;\n\n    font-size: 18px;\n    line-height: 1.7;\n}\n\n\n\/* =========================================================\n   INTRO\n   ========================================================= *\/\n\n.ethio-awards-intro {\n    max-width: 850px;\n    margin: 0 auto 35px;\n    text-align: center;\n}\n\n.ethio-awards-intro .eyebrow {\n    margin-bottom: 10px;\n\n    color: var(--es-orange);\n\n    font-size: 14px;\n    font-weight: 700;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n}\n\n.ethio-awards-intro h2 {\n    margin: 0 0 12px;\n\n    color: var(--es-dark) !important;\n\n    font-size: clamp(28px, 4vw, 40px);\n    line-height: 1.2;\n    font-weight: 800;\n}\n\n.ethio-awards-intro p {\n    margin: 0;\n\n    color: var(--es-gray) !important;\n\n    font-size: 16px;\n    line-height: 1.7;\n}\n\n\n\/* =========================================================\n   SEARCH\n   ========================================================= *\/\n\n.ethio-awards-search {\n    position: relative;\n    max-width: 850px;\n    margin: 0 auto 25px;\n}\n\n.ethio-awards-search input {\n    width: 100%;\n\n    padding: 18px 22px 18px 54px;\n\n    border: 1px solid var(--es-border);\n    border-radius: 50px;\n\n    background: #ffffff;\n    color: var(--es-dark);\n\n    font-size: 16px;\n    outline: none;\n\n    box-shadow:\n        0 8px 30px rgba(23,32,51,.08);\n\n    transition:\n        border-color .2s ease,\n        box-shadow .2s ease;\n}\n\n.ethio-awards-search input:focus {\n    border-color: var(--es-red);\n\n    box-shadow:\n        0 8px 30px rgba(247,25,70,.13);\n}\n\n.ethio-awards-search input::placeholder {\n    color: #98a2b3;\n}\n\n.ethio-awards-search-icon {\n    position: absolute;\n\n    left: 20px;\n    top: 50%;\n\n    transform: translateY(-50%);\n\n    font-size: 19px;\n\n    pointer-events: none;\n}\n\n\n\/* =========================================================\n   COUNT\n   ========================================================= *\/\n\n.ethio-nominee-count {\n    max-width: 1180px;\n\n    margin: 0 auto 22px;\n\n    color: var(--es-gray);\n\n    font-size: 14px;\n\n    text-align: left;\n}\n\n.ethio-nominee-count strong {\n    color: var(--es-dark);\n}\n\n\n\/* =========================================================\n   GRID\n   ========================================================= *\/\n\n.ethio-nominee-grid {\n    max-width: 1180px;\n\n    margin: 0 auto;\n\n    display: grid;\n\n    grid-template-columns:\n        repeat(3, minmax(0, 1fr));\n\n    gap: 28px;\n}\n\n\n\/* =========================================================\n   LOADING\n   ========================================================= *\/\n\n.ethio-nominee-loading {\n    grid-column: 1 \/ -1;\n\n    padding: 65px 20px;\n\n    text-align: center;\n\n    color: var(--es-gray);\n}\n\n.ethio-loading-spinner {\n    width: 40px;\n    height: 40px;\n\n    margin: 0 auto 18px;\n\n    border: 4px solid #eeeeee;\n\n    border-top-color: var(--es-red);\n\n    border-radius: 50%;\n\n    animation:\n        ethioSpin .8s linear infinite;\n}\n\n@keyframes ethioSpin {\n    to {\n        transform: rotate(360deg);\n    }\n}\n\n.ethio-loading-text {\n    margin: 0;\n\n    color: var(--es-gray);\n\n    font-size: 15px;\n}\n\n\n\/* =========================================================\n   NOMINEE CARD\n   ========================================================= *\/\n\n.ethio-nominee-card {\n    position: relative;\n\n    display: flex;\n    flex-direction: column;\n\n    min-height: 315px;\n\n    padding: 30px;\n\n    background: #ffffff;\n\n    border: 1px solid var(--es-border);\n\n    border-radius: 18px;\n\n    box-shadow:\n        0 7px 25px rgba(23,32,51,.07);\n\n    overflow: hidden;\n\n    transition:\n        transform .25s ease,\n        box-shadow .25s ease,\n        border-color .25s ease;\n}\n\n.ethio-nominee-card::before {\n    content: \"\";\n\n    position: absolute;\n\n    top: 0;\n    left: 0;\n    right: 0;\n\n    height: 4px;\n\n    background: var(--es-red);\n}\n\n.ethio-nominee-card:hover {\n    transform: translateY(-6px);\n\n    border-color:\n        rgba(247,25,70,.25);\n\n    box-shadow:\n        0 18px 40px rgba(23,32,51,.13);\n}\n\n\n\/* =========================================================\n   BADGE\n   ========================================================= *\/\n\n.ethio-nominee-badge {\n    display: inline-flex;\n\n    align-items: center;\n    align-self: flex-start;\n\n    margin-bottom: 20px;\n\n    padding: 7px 12px;\n\n    border-radius: 30px;\n\n    background: #fff7df;\n\n    color: #bd7800;\n\n    font-size: 12px;\n    font-weight: 700;\n\n    letter-spacing: .3px;\n\n    text-transform: uppercase;\n}\n\n\n\/* =========================================================\n   TITLE\n   ========================================================= *\/\n\n.ethio-nominee-card h3 {\n    margin: 0 0 15px;\n\n    color: var(--es-dark) !important;\n\n    font-size: 24px;\n\n    line-height: 1.25;\n\n    font-weight: 800;\n}\n\n\n\/* =========================================================\n   ADDRESS\n   ========================================================= *\/\n\n.ethio-nominee-address {\n    display: flex;\n\n    align-items: flex-start;\n\n    gap: 9px;\n\n    margin-bottom: 24px;\n\n    color: var(--es-gray);\n\n    font-size: 14px;\n\n    line-height: 1.6;\n}\n\n.ethio-nominee-address .pin {\n    flex: 0 0 auto;\n\n    font-size: 17px;\n\n    line-height: 1.4;\n}\n\n\n\/* =========================================================\n   BUTTON\n   ========================================================= *\/\n\n.ethio-nominee-button {\n    display: block;\n\n    width: 100%;\n\n    margin-top: auto;\n\n    padding: 14px 18px;\n\n    border-radius: 9px;\n\n    background: var(--es-red);\n\n    color: #ffffff !important;\n\n    text-align: center;\n\n    text-decoration: none !important;\n\n    font-size: 14px;\n\n    font-weight: 700;\n\n    transition:\n        background .2s ease,\n        transform .2s ease;\n}\n\n.ethio-nominee-button:hover {\n    background: var(--es-red-dark);\n\n    color: #ffffff !important;\n\n    transform: translateY(-1px);\n}\n\n\n\/* =========================================================\n   NO RESULTS\n   ========================================================= *\/\n\n.ethio-no-results {\n    display: none;\n\n    max-width: 1180px;\n\n    margin: 0 auto;\n\n    padding: 45px 25px;\n\n    border-radius: 15px;\n\n    background: var(--es-light);\n\n    color: var(--es-gray);\n\n    text-align: center;\n\n    font-size: 16px;\n}\n\n\n\/* =========================================================\n   ERROR\n   ========================================================= *\/\n\n.ethio-nominee-error {\n    grid-column: 1 \/ -1;\n\n    padding: 40px 25px;\n\n    border-radius: 15px;\n\n    background: #fff5f6;\n\n    color: #9f1239;\n\n    text-align: center;\n\n    line-height: 1.6;\n}\n\n\n\/* =========================================================\n   CTA\n   ========================================================= *\/\n\n.ethio-awards-cta {\n    max-width: 900px;\n\n    margin: 65px auto 0;\n\n    padding: 42px 30px;\n\n    border-radius: 20px;\n\n    background: var(--es-light);\n\n    text-align: center;\n}\n\n.ethio-awards-cta h2 {\n    margin: 0 0 10px;\n\n    color: var(--es-dark) !important;\n\n    font-size: 30px;\n\n    font-weight: 800;\n}\n\n.ethio-awards-cta p {\n    max-width: 650px;\n\n    margin: 0 auto 22px;\n\n    color: var(--es-gray);\n\n    line-height: 1.6;\n}\n\n.ethio-awards-cta a {\n    display: inline-block;\n\n    padding: 14px 26px;\n\n    border-radius: 9px;\n\n    background: var(--es-red);\n\n    color: #ffffff !important;\n\n    text-decoration: none !important;\n\n    font-weight: 700;\n}\n\n.ethio-awards-cta a:hover {\n    background: var(--es-red-dark);\n\n    color: #ffffff !important;\n}\n\n\n\/* =========================================================\n   TABLET\n   ========================================================= *\/\n\n@media (max-width: 950px) {\n\n    .ethio-nominee-grid {\n        grid-template-columns:\n            repeat(2, minmax(0, 1fr));\n    }\n\n}\n\n\n\/* =========================================================\n   MOBILE\n   ========================================================= *\/\n\n@media (max-width: 650px) {\n\n    .ethio-awards-page {\n        padding-left: 14px;\n        padding-right: 14px;\n    }\n\n    .ethio-awards-hero {\n        padding: 45px 22px;\n        border-radius: 18px;\n    }\n\n    .ethio-awards-hero h1 {\n        font-size: 34px;\n    }\n\n    .ethio-awards-hero p {\n        font-size: 16px;\n    }\n\n    .ethio-nominee-grid {\n        grid-template-columns: 1fr;\n        gap: 20px;\n    }\n\n    .ethio-nominee-card {\n        min-height: 285px;\n        padding: 25px;\n    }\n\n    .ethio-nominee-card h3 {\n        font-size: 22px;\n    }\n\n    .ethio-awards-cta {\n        padding: 35px 22px;\n    }\n\n}\n<\/style>\n\n\n<div class=\"ethio-awards-page\">\n\n\n    <!-- HERO -->\n\n    <section class=\"ethio-awards-hero\">\n\n        <div class=\"ethio-awards-trophy\">\n            \ud83c\udfc6 People's Awards 2026\n        <\/div>\n\n        <h1>\n            Ethiopian &amp; Eritrean Restaurant Nominees\n        <\/h1>\n\n        <p>\n            Discover the restaurants nominated by the community\n            and cast your vote for your favourite Ethiopian or\n            Eritrean restaurant.\n        <\/p>\n\n    <\/section>\n\n\n    <!-- INTRO -->\n\n    <section class=\"ethio-awards-intro\">\n\n        <div class=\"eyebrow\">\n            People's Awards 2026\n        <\/div>\n\n        <h2>\n            Meet This Year's Nominees\n        <\/h2>\n\n        <p>\n            These restaurants represent the incredible Ethiopian\n            and Eritrean food scene in Toronto. Explore the nominees,\n            discover new places, and vote for your favourite.\n        <\/p>\n\n    <\/section>\n\n\n    <!-- SEARCH -->\n\n    <div class=\"ethio-awards-search\">\n\n        <span class=\"ethio-awards-search-icon\">\n            \ud83d\udd0e\n        <\/span>\n\n        <input\n            type=\"text\"\n            id=\"ethioNomineeSearch\"\n            placeholder=\"Search restaurants or locations...\"\n            aria-label=\"Search nominees\"\n        >\n\n    <\/div>\n\n\n    <!-- COUNT -->\n\n    <div\n        class=\"ethio-nominee-count\"\n        id=\"ethioNomineeCount\"\n        style=\"display:none;\">\n    <\/div>\n\n\n    <!-- GRID -->\n\n    <div\n        class=\"ethio-nominee-grid\"\n        id=\"ethioNomineeGrid\">\n\n        <div\n            class=\"ethio-nominee-loading\"\n            id=\"ethioNomineeLoading\">\n\n            <div class=\"ethio-loading-spinner\"><\/div>\n\n            <p class=\"ethio-loading-text\">\n                Loading People's Awards nominees...\n            <\/p>\n\n        <\/div>\n\n    <\/div>\n\n\n    <!-- NO RESULTS -->\n\n    <div\n        class=\"ethio-no-results\"\n        id=\"ethioNoResults\">\n\n        No restaurants found matching your search.\n\n    <\/div>\n\n\n    <!-- CTA -->\n\n    <section class=\"ethio-awards-cta\">\n\n        <h2>\n            Your Vote Matters \ud83c\udfc6\n        <\/h2>\n\n        <p>\n            Support your favourite Ethiopian or Eritrean restaurant\n            and help recognize the businesses that make our community\n            special.\n        <\/p>\n\n        <a href=\"#ethioNomineeGrid\">\n            VIEW ALL NOMINEES\n        <\/a>\n\n    <\/section>\n\n\n<\/div>\n\n\n<script>\n(function () {\n\n    \"use strict\";\n\n\n    \/* ========================================================\n       LISTINGPRO CONFIGURATION\n       ======================================================== *\/\n\n    const API_URL =\n        \"\/directory\/wp-json\/wp\/v2\/listing\";\n\n\n    \/*\n     * Confirmed ListingPro taxonomy IDs\n     *\/\n\n    const RESTAURANT_CATEGORY_ID = 41;\n\n    const ONTARIO_ID = 109;\n\n    const TORONTO_ID = 110;\n\n\n    const PER_PAGE = 100;\n\n\n    \/* ========================================================\n       DOM\n       ======================================================== *\/\n\n    const grid =\n        document.getElementById(\n            \"ethioNomineeGrid\"\n        );\n\n\n    const loading =\n        document.getElementById(\n            \"ethioNomineeLoading\"\n        );\n\n\n    const searchInput =\n        document.getElementById(\n            \"ethioNomineeSearch\"\n        );\n\n\n    const noResults =\n        document.getElementById(\n            \"ethioNoResults\"\n        );\n\n\n    const countElement =\n        document.getElementById(\n            \"ethioNomineeCount\"\n        );\n\n\n    let allNominees = [];\n\n\n    \/* ========================================================\n       TITLE\n       ======================================================== *\/\n\n    function getTitle(listing) {\n\n        if (\n            listing &&\n            listing.title &&\n            typeof listing.title === \"object\"\n        ) {\n\n            return (\n                listing.title.rendered ||\n                \"Restaurant\"\n            );\n\n        }\n\n\n        return (\n            listing.title ||\n            \"Restaurant\"\n        );\n\n    }\n\n\n    \/* ========================================================\n       DYNAMIC ADDRESS\n       ======================================================== *\/\n\n    function getAddress(listing) {\n\n        \/*\n         * ListingPro places the visible\n         * address inside content.rendered.\n         *\n         * Example:\n         *\n         * Restaurant Name<br \/>\n         * 360 Queen St E, Toronto, ON...\n         *\/\n\n        if (\n            listing.content &&\n            listing.content.rendered\n        ) {\n\n            const html =\n                listing.content.rendered;\n\n\n            \/*\n             * Extract text immediately\n             * following the first <br>.\n             *\/\n\n            const match =\n                html.match(\n                    \/<br\\s*\\\/?>\\s*([^<]+)(?=<\\\/p>|<br|<\\\/)\/i\n                );\n\n\n            if (\n                match &&\n                match[1]\n            ) {\n\n                return decodeHTMLEntities(\n                    match[1]\n                        .replace(\n                            \/\\\\\\\/\/g,\n                            \"\/\"\n                        )\n                        .trim()\n                );\n\n            }\n\n\n            \/*\n             * Fallback parser.\n             *\/\n\n            const temp =\n                document.createElement(\n                    \"div\"\n                );\n\n\n            temp.innerHTML =\n                html;\n\n\n            const paragraphs =\n                temp.querySelectorAll(\n                    \"p\"\n                );\n\n\n            for (\n                let i = 0;\n                i < paragraphs.length;\n                i++\n            ) {\n\n                const paragraph =\n                    paragraphs[i];\n\n\n                const text =\n                    paragraph.textContent\n                        .replace(\n                            \/\\u00a0\/g,\n                            \" \"\n                        )\n                        .trim();\n\n\n                const lines =\n                    text\n                        .split(\/\\n+\/)\n                        .map(\n                            function (line) {\n                                return line.trim();\n                            }\n                        )\n                        .filter(\n                            function (line) {\n                                return line !== \"\";\n                            }\n                        );\n\n\n                if (\n                    lines.length >= 2\n                ) {\n\n                    return lines[1];\n\n                }\n\n            }\n\n        }\n\n\n        return \"Toronto, Ontario, Canada\";\n\n    }\n\n\n    \/* ========================================================\n       HTML ENTITY DECODER\n       ======================================================== *\/\n\n    function decodeHTMLEntities(\n        value\n    ) {\n\n        const textarea =\n            document.createElement(\n                \"textarea\"\n            );\n\n\n        textarea.innerHTML =\n            value;\n\n\n        return textarea.value.trim();\n\n    }\n\n\n    \/* ========================================================\n       TAXONOMY CHECK\n       ======================================================== *\/\n\n    function hasTaxonomy(\n        listing,\n        fieldName,\n        termID\n    ) {\n\n        if (\n            !Array.isArray(\n                listing[fieldName]\n            )\n        ) {\n\n            return false;\n\n        }\n\n\n        return listing[fieldName]\n            .some(\n                function (id) {\n\n                    return (\n                        Number(id) ===\n                        Number(termID)\n                    );\n\n                }\n            );\n\n    }\n\n\n    \/* ========================================================\n       NOMINEE CRITERIA\n       ======================================================== *\/\n\n    function isNominee(listing) {\n\n        const isRestaurant =\n            hasTaxonomy(\n                listing,\n                \"listing_category\",\n                RESTAURANT_CATEGORY_ID\n            );\n\n\n        const isOntario =\n            hasTaxonomy(\n                listing,\n                \"region\",\n                ONTARIO_ID\n            );\n\n\n        const isToronto =\n            hasTaxonomy(\n                listing,\n                \"region\",\n                TORONTO_ID\n            );\n\n\n        return (\n            isRestaurant &&\n            isOntario &&\n            isToronto\n        );\n\n    }\n\n\n    \/* ========================================================\n       GET API PAGE\n       ======================================================== *\/\n\n    async function getPage(\n        page\n    ) {\n\n        \/*\n         * Query Restaurant + Toronto\n         * directly from ListingPro.\n         *\/\n\n        const url =\n            API_URL +\n            \"?listing_category=\" +\n            RESTAURANT_CATEGORY_ID +\n            \"&region=\" +\n            TORONTO_ID +\n            \"&per_page=\" +\n            PER_PAGE +\n            \"&page=\" +\n            page;\n\n\n        const response =\n            await fetch(\n                url,\n                {\n                    method: \"GET\",\n\n                    credentials:\n                        \"same-origin\",\n\n                    cache:\n                        \"no-store\"\n                }\n            );\n\n\n        if (\n            !response.ok\n        ) {\n\n            throw new Error(\n                \"ListingPro API returned HTTP \" +\n                response.status\n            );\n\n        }\n\n\n        return await response.json();\n\n    }\n\n\n    \/* ========================================================\n       LOAD ALL LISTINGS\n       ======================================================== *\/\n\n    async function loadListings() {\n\n        let allListings = [];\n\n        let page = 1;\n\n\n        while (true) {\n\n            const listings =\n                await getPage(\n                    page\n                );\n\n\n            if (\n                Array.isArray(\n                    listings\n                )\n            ) {\n\n                allListings =\n                    allListings.concat(\n                        listings\n                    );\n\n            }\n\n\n            \/*\n             * Stop at the final page.\n             *\/\n\n            if (\n                !Array.isArray(listings) ||\n                listings.length < PER_PAGE\n            ) {\n\n                break;\n\n            }\n\n\n            page++;\n\n\n            \/*\n             * Safety limit.\n             *\/\n\n            if (\n                page > 100\n            ) {\n\n                break;\n\n            }\n\n        }\n\n\n        return allListings;\n\n    }\n\n\n    \/* ========================================================\n       LOAD NOMINEES\n       ======================================================== *\/\n\n    async function loadNominees() {\n\n        try {\n\n            const listings =\n                await loadListings();\n\n\n            \/*\n             * Apply all three criteria.\n             *\/\n\n            allNominees =\n                listings.filter(\n                    isNominee\n                );\n\n\n            \/*\n             * Remove duplicate listings.\n             *\/\n\n            const seen =\n                new Set();\n\n\n            allNominees =\n                allNominees.filter(\n                    function (listing) {\n\n                        if (\n                            seen.has(\n                                listing.id\n                            )\n                        ) {\n\n                            return false;\n\n                        }\n\n\n                        seen.add(\n                            listing.id\n                        );\n\n\n                        return true;\n\n                    }\n                );\n\n\n            \/*\n             * Alphabetical sorting.\n             *\/\n\n            allNominees.sort(\n                function (a, b) {\n\n                    return getTitle(a)\n                        .localeCompare(\n                            getTitle(b)\n                        );\n\n                }\n            );\n\n\n            if (loading) {\n\n                loading.remove();\n\n            }\n\n\n            updateCount(\n                allNominees.length\n            );\n\n\n            renderNominees(\n                allNominees\n            );\n\n\n        } catch (error) {\n\n            console.error(\n                \"EthioSearch Awards Error:\",\n                error\n            );\n\n\n            if (loading) {\n\n                loading.remove();\n\n            }\n\n\n            grid.innerHTML = \"\";\n\n\n            const errorBox =\n                document.createElement(\n                    \"div\"\n                );\n\n\n            errorBox.className =\n                \"ethio-nominee-error\";\n\n\n            errorBox.innerHTML =\n                \"We're having trouble loading the nominees right now.<br>\" +\n                \"Please refresh the page and try again.\";\n\n\n            grid.appendChild(\n                errorBox\n            );\n\n        }\n\n    }\n\n\n    \/* ========================================================\n       UPDATE COUNT\n       ======================================================== *\/\n\n    function updateCount(\n        count\n    ) {\n\n        if (!countElement) {\n\n            return;\n\n        }\n\n\n        countElement.innerHTML =\n            \"<strong>\" +\n            count +\n            \"<\/strong> restaurant\" +\n            (\n                count === 1\n                    ? \"\"\n                    : \"s\"\n            ) +\n            \" nominated\";\n\n\n        countElement.style.display =\n            \"block\";\n\n    }\n\n\n    \/* ========================================================\n       CREATE CARD\n       ======================================================== *\/\n\n    function createCard(\n        listing\n    ) {\n\n        const name =\n            getTitle(\n                listing\n            );\n\n\n        const address =\n            getAddress(\n                listing\n            );\n\n\n        \/*\n         * Use the actual ListingPro URL.\n         *\/\n\n        const url =\n            listing.link ||\n            \"#\";\n\n\n        const card =\n            document.createElement(\n                \"article\"\n            );\n\n\n        card.className =\n            \"ethio-nominee-card\";\n\n\n        \/* Badge *\/\n\n        const badge =\n            document.createElement(\n                \"div\"\n            );\n\n\n        badge.className =\n            \"ethio-nominee-badge\";\n\n\n        badge.textContent =\n            \"\ud83c\udfc6 Nominee 2026\";\n\n\n        \/* Restaurant name *\/\n\n        const title =\n            document.createElement(\n                \"h3\"\n            );\n\n\n        title.textContent =\n            name;\n\n\n        \/* Address *\/\n\n        const addressContainer =\n            document.createElement(\n                \"div\"\n            );\n\n\n        addressContainer.className =\n            \"ethio-nominee-address\";\n\n\n        const pin =\n            document.createElement(\n                \"span\"\n            );\n\n\n        pin.className =\n            \"pin\";\n\n\n        pin.textContent =\n            \"\ud83d\udccd\";\n\n\n        const addressText =\n            document.createElement(\n                \"span\"\n            );\n\n\n        addressText.textContent =\n            address;\n\n\n        addressContainer.appendChild(\n            pin\n        );\n\n\n        addressContainer.appendChild(\n            addressText\n        );\n\n\n        \/* Button *\/\n\n        const button =\n            document.createElement(\n                \"a\"\n            );\n\n\n        button.className =\n            \"ethio-nominee-button\";\n\n\n        button.href =\n            url;\n\n\n        button.textContent =\n            \"VIEW RESTAURANT & VOTE \u2192\";\n\n\n        \/* Assemble card *\/\n\n        card.appendChild(\n            badge\n        );\n\n        card.appendChild(\n            title\n        );\n\n        card.appendChild(\n            addressContainer\n        );\n\n        card.appendChild(\n            button\n        );\n\n\n        return card;\n\n    }\n\n\n    \/* ========================================================\n       RENDER\n       ======================================================== *\/\n\n    function renderNominees(\n        listings\n    ) {\n\n        const existingCards =\n            grid.querySelectorAll(\n                \".ethio-nominee-card\"\n            );\n\n\n        existingCards.forEach(\n            function (card) {\n\n                card.remove();\n\n            }\n        );\n\n\n        if (\n            !listings.length\n        ) {\n\n            noResults.style.display =\n                \"block\";\n\n            return;\n\n        }\n\n\n        noResults.style.display =\n            \"none\";\n\n\n        listings.forEach(\n            function (listing) {\n\n                grid.appendChild(\n                    createCard(\n                        listing\n                    )\n                );\n\n            }\n        );\n\n    }\n\n\n    \/* ========================================================\n       SEARCH\n       ======================================================== *\/\n\n    if (searchInput) {\n\n        searchInput.addEventListener(\n            \"input\",\n            function () {\n\n                const search =\n                    this.value\n                        .toLowerCase()\n                        .trim();\n\n\n                if (!search) {\n\n                    renderNominees(\n                        allNominees\n                    );\n\n\n                    updateCount(\n                        allNominees.length\n                    );\n\n\n                    return;\n\n                }\n\n\n                const filtered =\n                    allNominees.filter(\n                        function (listing) {\n\n                            const name =\n                                getTitle(\n                                    listing\n                                )\n                                .toLowerCase();\n\n\n                            const address =\n                                getAddress(\n                                    listing\n                                )\n                                .toLowerCase();\n\n\n                            return (\n                                name.includes(\n                                    search\n                                ) ||\n                                address.includes(\n                                    search\n                                )\n                            );\n\n                        }\n                    );\n\n\n                renderNominees(\n                    filtered\n                );\n\n\n                updateCount(\n                    filtered.length\n                );\n\n            }\n        );\n\n    }\n\n\n    \/* ========================================================\n       START\n       ======================================================== *\/\n\n    loadNominees();\n\n})();\n<\/script>\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\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\ud83c\udfc6 People&#8217;s Awards 2026 Ethiopian &amp; Eritrean Restaurant Nominees Discover the restaurants nominated by the community and cast your vote for your favourite Ethiopian or Eritrean restaurant. People&#8217;s Awards 2026 Meet This Year&#8217;s Nominees These restaurants represent the incredible Ethiopian and Eritrean food scene in Toronto. Explore the nominees, discover new places, and vote for [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-2900","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ethiosearch.com\/directory\/wp-json\/wp\/v2\/pages\/2900","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ethiosearch.com\/directory\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ethiosearch.com\/directory\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ethiosearch.com\/directory\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ethiosearch.com\/directory\/wp-json\/wp\/v2\/comments?post=2900"}],"version-history":[{"count":64,"href":"https:\/\/ethiosearch.com\/directory\/wp-json\/wp\/v2\/pages\/2900\/revisions"}],"predecessor-version":[{"id":3066,"href":"https:\/\/ethiosearch.com\/directory\/wp-json\/wp\/v2\/pages\/2900\/revisions\/3066"}],"wp:attachment":[{"href":"https:\/\/ethiosearch.com\/directory\/wp-json\/wp\/v2\/media?parent=2900"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}