{"id":183,"date":"2026-09-12T03:04:57","date_gmt":"2026-09-12T03:04:57","guid":{"rendered":"https:\/\/afriqagro.com\/?page_id=183"},"modified":"2026-09-12T04:23:26","modified_gmt":"2026-09-12T04:23:26","slug":"market-prices","status":"publish","type":"page","link":"https:\/\/afriqagro.com\/fr\/market-prices\/","title":{"rendered":"Prix du march\u00e9"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"183\" class=\"elementor elementor-183\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d85e182 e-flex e-con-boxed e-con e-parent\" data-id=\"d85e182\" 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-d0b3402 elementor-widget elementor-widget-shortcode\" data-id=\"d0b3402\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">  \n    <section class=\"aaq-mp\" id=\"aaqMarketPrices\">\n\n        <!-- =====================================================\n             TOP \/ INTRO ZONE\n             ===================================================== -->\n        <div class=\"aaq-mp__top\">\n            <div class=\"aaq-mp__inner\">\n\n                <header class=\"aaq-mp__header\">\n                    <div class=\"aaq-mp__heading\">\n                        <h1>Market Prices<\/h1>\n                        <p>Real-time agricultural prices across CEMAC markets<\/p>\n                    <\/div>\n\n                    <button\n                        class=\"aaq-refresh\"\n                        type=\"button\"\n                        id=\"aaqRefreshPrices\"\n                        aria-label=\"Refresh latest market prices\"\n                    >\n                        <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                            <path d=\"M20 11a8 8 0 0 0-15.5-2M4 4v5h5M4 13a8 8 0 0 0 15.5 2M20 20v-5h-5\" \/>\n                        <\/svg>\n                        <span>Refresh prices<\/span>\n                    <\/button>\n                <\/header>\n\n                <div class=\"aaq-countrybar\" aria-label=\"Filter market prices by country\">\n                    <strong class=\"aaq-filter-title\">\n                        <svg class=\"aaq-filter-globe\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                            <circle cx=\"12\" cy=\"12\" r=\"9\"><\/circle>\n                            <path d=\"M3 12h18\"><\/path>\n                            <path d=\"M12 3c2.4 2.5 3.7 5.5 3.7 9S14.4 18.5 12 21\"><\/path>\n                            <path d=\"M12 3C9.6 5.5 8.3 8.5 8.3 12s1.3 6.5 3.7 9\"><\/path>\n                        <\/svg>\n                        <span>Filter by country:<\/span>\n                    <\/strong>\n\n                    <div class=\"aaq-countrychips\" id=\"aaqCountryChips\">\n                        <button class=\"aaq-chip is-active\" type=\"button\" data-country=\"all\">\n                            \ud83c\udf0d All countries\n                        <\/button>\n\n                                                    <button\n                                class=\"aaq-chip\"\n                                type=\"button\"\n                                data-country=\"CMR\"\n                            >\n                                \ud83c\udde8\ud83c\uddf2 Cameroon                            <\/button>\n                                                    <button\n                                class=\"aaq-chip\"\n                                type=\"button\"\n                                data-country=\"TCD\"\n                            >\n                                \ud83c\uddf9\ud83c\udde9 Chad                            <\/button>\n                                                    <button\n                                class=\"aaq-chip\"\n                                type=\"button\"\n                                data-country=\"CAF\"\n                            >\n                                \ud83c\udde8\ud83c\uddeb Central African Rep.                            <\/button>\n                                                    <button\n                                class=\"aaq-chip\"\n                                type=\"button\"\n                                data-country=\"COG\"\n                            >\n                                \ud83c\udde8\ud83c\uddec Rep. of Congo                            <\/button>\n                                                    <button\n                                class=\"aaq-chip\"\n                                type=\"button\"\n                                data-country=\"GAB\"\n                            >\n                                \ud83c\uddec\ud83c\udde6 Gabon                            <\/button>\n                                                    <button\n                                class=\"aaq-chip\"\n                                type=\"button\"\n                                data-country=\"GNQ\"\n                            >\n                                \ud83c\uddec\ud83c\uddf6 Equatorial Guinea                            <\/button>\n                                            <\/div>\n                <\/div>\n\n                <div class=\"aaq-loading\" id=\"aaqLoading\" role=\"status\" aria-live=\"polite\">\n                    <span class=\"aaq-spinner\" aria-hidden=\"true\"><\/span>\n                    <span>Loading latest market data\u2026<\/span>\n                <\/div>\n\n                <div class=\"aaq-alert\" id=\"aaqAlert\" hidden><\/div>\n\n                <div class=\"aaq-kpis\" id=\"aaqKpis\" hidden>\n                    <article class=\"aaq-kpi\">\n                        <strong id=\"aaqProductsCount\">0<\/strong>\n                        <span>Products tracked<\/span>\n                    <\/article>\n\n                    <article class=\"aaq-kpi\">\n                        <strong id=\"aaqMarketsCount\">0<\/strong>\n                        <span>Active markets<\/span>\n                    <\/article>\n\n                    <article class=\"aaq-kpi\">\n                        <strong id=\"aaqCountriesCount\">0<\/strong>\n                        <span>CEMAC countries<\/span>\n                    <\/article>\n                <\/div>\n\n                <div class=\"aaq-updated\" id=\"aaqUpdated\" hidden><\/div>\n\n            <\/div>\n        <\/div>\n\n        <!-- =====================================================\n             MAIN BODY ZONE\n             ===================================================== -->\n        <div class=\"aaq-mp__body\">\n            <div class=\"aaq-mp__inner\">\n\n                <div class=\"aaq-dashboard\" id=\"aaqDashboard\" hidden>\n\n                    <!-- TOP MOVERS -->\n                    <section class=\"aaq-panel aaq-movers-panel\">\n                        <h2 class=\"aaq-section-title aaq-top-mover-title\">\n                            <span class=\"aaq-heading-icon\">\n                                <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                                    <path d=\"M3 3v18h18\"><\/path>\n                                    <path d=\"M6 15l4-4 3 3 6-7\"><\/path>\n                                    <path d=\"M16 7h3v3\"><\/path>\n                                <\/svg>\n                            <\/span>\n                            <span>Top movers<\/span>\n                        <\/h2>\n\n                        <div class=\"aaq-movers\" id=\"aaqMovers\"><\/div>\n                    <\/section>\n\n                    <!-- MARKET SNAPSHOT -->\n                    <section class=\"aaq-panel aaq-snapshot-panel\">\n                        <div class=\"aaq-panelhead\">\n                            <h2 class=\"aaq-section-title\">\n                                <span class=\"aaq-heading-icon\">\n                                    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                                        <path d=\"M4 6h2\"><\/path>\n                                        <path d=\"M4 12h2\"><\/path>\n                                        <path d=\"M4 18h2\"><\/path>\n                                        <path d=\"M9 6h11\"><\/path>\n                                        <path d=\"M9 12h11\"><\/path>\n                                        <path d=\"M9 18h11\"><\/path>\n                                    <\/svg>\n                                <\/span>\n                                <span>Market snapshot<\/span>\n                            <\/h2>\n\n                            <span id=\"aaqSnapshotCountry\" class=\"aaq-snapshot-country\">\ud83c\udf0d All countries<\/span>\n                        <\/div>\n\n                        <div class=\"aaq-snapshot\" id=\"aaqSnapshot\"><\/div>\n                    <\/section>\n\n                <\/div>\n\n                <!-- MARKET PRICES TABLE -->\n                <section class=\"aaq-table-section\" id=\"aaqTableSection\" hidden>\n                    <h2 class=\"aaq-section-title aaq-main-section-title\">\n                        <span class=\"aaq-heading-icon\">\n                            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                                <path d=\"M3 9h18l-2 10H5L3 9z\"><\/path>\n                                <path d=\"M8 9l4-6 4 6\"><\/path>\n                                <path d=\"M9 12v4\"><\/path>\n                                <path d=\"M15 12v4\"><\/path>\n                            <\/svg>\n                        <\/span>\n                        <span>Market Prices<\/span>\n                    <\/h2>\n\n                    <div class=\"aaq-filters\">\n                        <label class=\"aaq-search\">\n                            <span class=\"screen-reader-text\">Search market prices<\/span>\n                            <input\n                                type=\"search\"\n                                id=\"aaqSearch\"\n                                placeholder=\"Search for a product or market...\"\n                                autocomplete=\"off\"\n                            >\n                        <\/label>\n\n                        <label class=\"aaq-category-filter\">\n                            <span class=\"screen-reader-text\">Filter by category<\/span>\n                            <select id=\"aaqCategory\">\n                                <option value=\"all\">All<\/option>\n                            <\/select>\n                        <\/label>\n                    <\/div>\n\n                    <div class=\"aaq-tablewrap\">\n                        <table class=\"aaq-table\">\n                            <thead>\n                                <tr>\n                                    <th class=\"aaq-col-product\">Product<\/th>\n                                    <th class=\"aaq-col-category\">Category<\/th>\n                                    <th class=\"aaq-col-market\">Market<\/th>\n                                    <th class=\"aaq-col-country\">Country<\/th>\n                                    <th class=\"aaq-col-xaf\">Price XAF<\/th>\n                                    <th class=\"aaq-col-usd\">Price USD<\/th>\n                                    <th class=\"aaq-col-trend\">Trend<\/th>\n                                <\/tr>\n                            <\/thead>\n                            <tbody id=\"aaqTableBody\"><\/tbody>\n                        <\/table>\n                    <\/div>\n\n                    <div class=\"aaq-pagination-row\">\n                        <span id=\"aaqResultCount\"><\/span>\n                        <nav class=\"aaq-pagination\" id=\"aaqPagination\" aria-label=\"Market price pages\"><\/nav>\n                    <\/div>\n                <\/section>\n\n                <!-- BUYING TIPS -->\n                <section class=\"aaq-tips\" id=\"aaqTipsSection\" hidden>\n                    <h2 class=\"aaq-section-title aaq-main-section-title\">\n                        <span class=\"aaq-heading-icon\">\n                            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                                <path d=\"M9 18h6\"><\/path>\n                                <path d=\"M10 22h4\"><\/path>\n                                <path d=\"M8.2 14.8C6.8 13.6 6 11.9 6 10a6 6 0 1 1 12 0c0 1.9-.8 3.6-2.2 4.8-.9.8-1.4 1.8-1.5 3.2H9.7c-.1-1.4-.6-2.4-1.5-3.2z\"><\/path>\n                            <\/svg>\n                        <\/span>\n                        <span>Buying tips \u2014 Cheapest markets<\/span>\n                    <\/h2>\n\n                    <div class=\"aaq-tipgrid\" id=\"aaqTips\"><\/div>\n                <\/section>\n\n                <div class=\"aaq-source\" id=\"aaqSource\" hidden>\n                    <strong>Data source:<\/strong>\n                    World Food Programme Food Prices via HDX HAPI. Prices are the latest records available from the provider.\n                    USD estimates use a current XAF\/USD reference conversion from Frankfurter.\n                <\/div>\n\n            <\/div>\n        <\/div>\n\n    <\/section>\n\n    <style>\n    \/* =========================================================\n       BASE \/ RESET\n       ========================================================= *\/\n\n    .aaq-mp,\n    .aaq-mp *{\n        box-sizing:border-box;\n    }\n\n    .aaq-mp{\n        --aaq-green:#1f9149;\n        --aaq-green-dark:#14793c;\n        --aaq-green-soft:#eefcf3;\n        --aaq-green-border:#a9edbf;\n        --aaq-text:#202124;\n        --aaq-muted:#7a7f7d;\n        --aaq-line:#d9dddb;\n        --aaq-top-bg:#eef5f2;\n        --aaq-body-bg:#f7f8f9;\n        --aaq-card:#ffffff;\n        --aaq-red:#e52b2b;\n        --aaq-orange:#a33e0b;\n\n        width:100%;\n        max-width:100%;\n        margin:0;\n        padding:0;\n        overflow:hidden;\n        color:var(--aaq-text);\n        font-family:Arial, Helvetica, sans-serif;\n        font-size:16px;\n        line-height:1.45;\n        background:var(--aaq-body-bg);\n    }\n\n    .aaq-mp__top{\n        width:100%;\n        background:var(--aaq-top-bg);\n        border-bottom:1px solid #dce3df;\n        padding:38px 0 27px;\n    }\n\n    .aaq-mp__body{\n        width:100%;\n        background:var(--aaq-body-bg);\n        padding:34px 0 72px;\n    }\n\n    .aaq-mp__inner{\n        width:min(1540px, calc(100% - 48px));\n        margin:0 auto;\n        min-width:0;\n    }\n\n    \/* =========================================================\n       HEADER\n       ========================================================= *\/\n\n    .aaq-mp__header{\n        display:flex;\n        align-items:flex-start;\n        justify-content:space-between;\n        gap:32px;\n        margin-bottom:20px;\n    }\n\n    .aaq-mp__heading{\n        min-width:0;\n    }\n\n    .aaq-mp__header h1{\n        margin:0 0 7px;\n        color:#1d1f20;\n        font-size:clamp(34px, 2.35vw, 42px);\n        line-height:1.06;\n        letter-spacing:-.65px;\n        font-weight:800;\n    }\n\n    .aaq-mp__header p{\n        margin:0;\n        color:#7f8382;\n        font-size:clamp(16px, 1.05vw, 18px);\n        line-height:1.42;\n    }\n\n    .aaq-refresh{\n        flex:0 0 auto;\n        display:inline-flex;\n        align-items:center;\n        justify-content:center;\n        gap:8px;\n        min-height:48px;\n        margin-top:8px;\n        padding:13px 19px;\n        border:0;\n        border-radius:0;\n        background:var(--aaq-green);\n        color:#fff;\n        font-family:inherit;\n        font-size:15px;\n        font-weight:800;\n        line-height:1;\n        white-space:nowrap;\n        cursor:pointer;\n        transition:background .18s ease, opacity .18s ease;\n    }\n\n    .aaq-refresh:hover{\n        background:var(--aaq-green-dark);\n    }\n\n    .aaq-refresh:disabled{\n        opacity:.62;\n        cursor:wait;\n    }\n\n    .aaq-refresh svg{\n        width:18px;\n        height:18px;\n        fill:none;\n        stroke:currentColor;\n        stroke-width:2.2;\n        stroke-linecap:round;\n        stroke-linejoin:round;\n    }\n\n    \/* =========================================================\n       COUNTRY FILTERS\n       ========================================================= *\/\n\n    .aaq-countrybar{\n        display:flex;\n        align-items:center;\n        gap:14px;\n        margin:22px 0 38px;\n        min-width:0;\n    }\n\n    .aaq-filter-title{\n        display:inline-flex;\n        align-items:center;\n        gap:7px;\n        flex:0 0 auto;\n        color:#2f3331;\n        font-size:15px;\n        font-weight:800;\n        white-space:nowrap;\n    }\n\n    .aaq-filter-globe{\n        width:18px;\n        height:18px;\n        fill:none;\n        stroke:#303332;\n        stroke-width:1.8;\n    }\n\n    .aaq-countrychips{\n        display:flex;\n        align-items:center;\n        flex-wrap:wrap;\n        gap:9px;\n        min-width:0;\n    }\n\n    .aaq-chip{\n        appearance:none;\n        display:inline-flex;\n        align-items:center;\n        justify-content:center;\n        min-height:42px;\n        margin:0;\n        padding:10px 15px;\n        border:1px solid #d6dada;\n        border-radius:0;\n        background:#fff;\n        color:#2d302f;\n        font-family:inherit;\n        font-size:14px;\n        font-weight:500;\n        line-height:1.15;\n        white-space:nowrap;\n        cursor:pointer;\n        transition:background .15s ease, border-color .15s ease, color .15s ease;\n    }\n\n    .aaq-chip:hover,\n    .aaq-chip.is-active{\n        background:var(--aaq-green);\n        border-color:var(--aaq-green);\n        color:#fff;\n    }\n\n    \/* =========================================================\n       LOADING \/ ALERT\n       ========================================================= *\/\n\n    .aaq-loading{\n        min-height:132px;\n        display:flex;\n        align-items:center;\n        justify-content:center;\n        gap:12px;\n        color:#686d6a;\n        font-size:15px;\n        font-weight:700;\n    }\n\n    .aaq-spinner{\n        width:24px;\n        height:24px;\n        flex:0 0 auto;\n        border:3px solid #cfe5d6;\n        border-top-color:var(--aaq-green);\n        border-radius:50%;\n        animation:aaqSpin .8s linear infinite;\n    }\n\n    @keyframes aaqSpin{\n        to{ transform:rotate(360deg); }\n    }\n\n    .aaq-alert{\n        margin:12px 0 26px;\n        padding:15px 17px;\n        border:1px solid #ebcd84;\n        border-radius:10px;\n        background:#fff9eb;\n        color:#6b4a13;\n        font-size:14px;\n        line-height:1.55;\n    }\n\n    \/* =========================================================\n       KPI CARDS\n       ========================================================= *\/\n\n    .aaq-kpis{\n        display:grid;\n        grid-template-columns:repeat(3, minmax(0,1fr));\n        gap:22px;\n        margin-bottom:12px;\n    }\n\n    .aaq-kpi{\n        min-width:0;\n        min-height:121px;\n        padding:18px;\n        display:flex;\n        flex-direction:column;\n        align-items:center;\n        justify-content:center;\n        text-align:center;\n        background:#fff;\n        border:1px solid var(--aaq-line);\n        border-radius:14px;\n        box-shadow:0 1px 0 rgba(0,0,0,.01);\n    }\n\n    .aaq-kpi strong{\n        display:block;\n        margin:0 0 10px;\n        color:var(--aaq-green);\n        font-size:clamp(33px, 2.3vw, 39px);\n        font-weight:800;\n        line-height:1;\n    }\n\n    .aaq-kpi span{\n        color:#818583;\n        font-size:15px;\n        line-height:1.25;\n    }\n\n    .aaq-updated{\n        margin:10px 0 0;\n        color:#9a9e9c;\n        font-size:13px;\n        line-height:1.3;\n        text-align:right;\n    }\n\n    \/* =========================================================\n       TITLES \/ ICONS\n       ========================================================= *\/\n\n    .aaq-section-title{\n        display:flex;\n        align-items:center;\n        gap:10px;\n        margin:0 0 20px;\n        color:#1f2121;\n        font-size:clamp(25px, 1.65vw, 29px);\n        font-weight:800;\n        line-height:1.15;\n        letter-spacing:-.25px;\n    }\n\n    .aaq-heading-icon{\n        flex:0 0 auto;\n        display:inline-flex;\n        align-items:center;\n        justify-content:center;\n        width:29px;\n        height:29px;\n        color:var(--aaq-green);\n    }\n\n    .aaq-heading-icon svg{\n        display:block;\n        width:100%;\n        height:100%;\n        fill:none;\n        stroke:currentColor;\n        stroke-width:2.2;\n        stroke-linecap:round;\n        stroke-linejoin:round;\n    }\n\n    \/* =========================================================\n       DASHBOARD\n       ========================================================= *\/\n\n    .aaq-dashboard{\n        display:grid;\n        grid-template-columns:minmax(0,1fr) minmax(0,1.07fr);\n        gap:30px;\n        min-width:0;\n    }\n\n    .aaq-panel{\n        min-width:0;\n    }\n\n    \/* =========================================================\n       TOP MOVERS\n       ========================================================= *\/\n\n    .aaq-movers{\n        display:grid;\n        grid-template-columns:repeat(2, minmax(0,1fr));\n        gap:17px;\n    }\n\n    .aaq-mover{\n        min-width:0;\n        min-height:140px;\n        padding:19px;\n        background:#effcf3;\n        border:1px solid var(--aaq-green-border);\n        border-radius:14px;\n    }\n\n    .aaq-mover.is-down{\n        background:#fff4f4;\n        border-color:#ffd0d0;\n    }\n\n    .aaq-mover h3{\n        margin:0 0 4px;\n        color:#303332;\n        font-size:17px;\n        font-weight:800;\n        line-height:1.25;\n    }\n\n    .aaq-mover .cat{\n        margin-bottom:14px;\n        color:#858987;\n        font-size:13.5px;\n        line-height:1.25;\n    }\n\n    .aaq-mover .price{\n        margin-bottom:7px;\n        color:var(--aaq-green);\n        font-size:18px;\n        font-weight:800;\n        line-height:1.25;\n    }\n\n    .aaq-mover.is-down .price{\n        color:#bd2828;\n    }\n\n    .aaq-trend{\n        color:#0b9c43;\n        font-size:14px;\n        font-weight:800;\n        line-height:1.2;\n    }\n\n    .aaq-trend.down{ color:var(--aaq-red); }\n    .aaq-trend.flat{ color:#69727b; }\n\n    \/* =========================================================\n       MARKET SNAPSHOT\n       ========================================================= *\/\n\n    .aaq-panelhead{\n        display:flex;\n        align-items:flex-start;\n        justify-content:space-between;\n        gap:15px;\n    }\n\n    .aaq-snapshot-country{\n        flex:0 0 auto;\n        margin-top:3px;\n        color:#636866;\n        font-size:14px;\n        line-height:1.2;\n        white-space:nowrap;\n    }\n\n    .aaq-snapshot{\n        display:grid;\n        grid-template-columns:repeat(2, minmax(0,1fr));\n        gap:17px;\n    }\n\n    .aaq-snapcard{\n        min-width:0;\n        padding:16px 17px 14px;\n        background:#fff;\n        border:1px solid var(--aaq-line);\n        border-radius:13px;\n    }\n\n    .aaq-snapcard h3{\n        margin:0 0 12px;\n        color:var(--aaq-green);\n        font-size:15px;\n        font-weight:800;\n        letter-spacing:.3px;\n        line-height:1.2;\n        text-transform:uppercase;\n    }\n\n    .aaq-snaprow{\n        display:grid;\n        grid-template-columns:minmax(0,1fr) auto;\n        gap:10px;\n        padding:8px 0;\n        min-width:0;\n    }\n\n    .aaq-snapleft{\n        min-width:0;\n    }\n\n    .aaq-snapname{\n        margin-bottom:3px;\n        color:#343735;\n        font-size:14.5px;\n        font-weight:800;\n        line-height:1.28;\n    }\n\n    .aaq-snapmarket{\n        display:flex;\n        align-items:center;\n        gap:4px;\n        min-width:0;\n        overflow:hidden;\n        color:#858987;\n        font-size:12.5px;\n        line-height:1.25;\n        text-overflow:ellipsis;\n        white-space:nowrap;\n    }\n\n    .aaq-pin{\n        width:13px;\n        height:13px;\n        flex:0 0 auto;\n        fill:currentColor;\n    }\n\n    .aaq-snapright{\n        text-align:right;\n    }\n\n    .aaq-snapprice{\n        margin-bottom:4px;\n        color:#343735;\n        font-size:14.5px;\n        font-weight:800;\n        line-height:1.2;\n        white-space:nowrap;\n    }\n\n    .aaq-pill{\n        display:inline-flex;\n        align-items:center;\n        justify-content:center;\n        gap:4px;\n        padding:6px 9px;\n        border-radius:999px;\n        background:#edf9f1;\n        color:#07933e;\n        font-size:12px;\n        font-weight:800;\n        line-height:1;\n        white-space:nowrap;\n    }\n\n    .aaq-pill.down{\n        background:#fff0f0;\n        color:var(--aaq-red);\n    }\n\n    .aaq-pill.flat{\n        background:#f0f2f4;\n        color:#68717b;\n    }\n\n    \/* =========================================================\n       MARKET TABLE SECTION\n       ========================================================= *\/\n\n    .aaq-table-section{\n        margin-top:54px;\n    }\n\n    .aaq-filters{\n        display:grid;\n        grid-template-columns:minmax(0,2.05fr) minmax(270px,.95fr);\n        gap:18px;\n        margin-bottom:24px;\n    }\n\n    .aaq-filters label{\n        min-width:0;\n    }\n\n    .aaq-filters input,\n    .aaq-filters select{\n        display:block;\n        width:100%;\n        height:52px;\n        margin:0;\n        padding:0 18px;\n        border:1px solid #d4d9d7;\n        border-radius:8px;\n        background:#fff;\n        color:#333736;\n        outline:none;\n        font-family:inherit;\n        font-size:15px;\n        line-height:1;\n    }\n\n    .aaq-filters input::placeholder{\n        color:#757e85;\n        opacity:1;\n    }\n\n    .aaq-filters input:focus,\n    .aaq-filters select:focus{\n        border-color:var(--aaq-green);\n        box-shadow:0 0 0 2px rgba(31,145,73,.10);\n    }\n\n    .aaq-tablewrap{\n        width:100%;\n        overflow:hidden;\n        background:#fff;\n        border:1px solid var(--aaq-line);\n        border-radius:12px;\n    }\n\n    .aaq-table{\n        width:100%;\n        border-collapse:collapse;\n        border-spacing:0;\n        table-layout:auto;\n        font-size:15px;\n    }\n\n    .aaq-table th{\n        padding:14px 16px;\n        background:var(--aaq-green);\n        color:#102b32;\n        text-align:left;\n        font-size:14px;\n        font-weight:800;\n        line-height:1.25;\n        white-space:nowrap;\n    }\n\n    .aaq-table td{\n        padding:13px 16px;\n        border-bottom:1px solid #e8ecea;\n        color:#262b29;\n        font-size:14.5px;\n        line-height:1.35;\n        vertical-align:middle;\n    }\n\n    .aaq-table tbody tr:nth-child(even){\n        background:#f8faf9;\n    }\n\n    .aaq-table tbody tr:last-child td{\n        border-bottom:0;\n    }\n\n    .aaq-table td strong{\n        font-weight:500;\n    }\n\n    .aaq-categorytag{\n        display:inline-block;\n        padding:4px 9px;\n        border-radius:999px;\n        background:#e6f2ea;\n        color:#148242;\n        font-size:12px;\n        line-height:1.2;\n        white-space:nowrap;\n    }\n\n    .aaq-market-cell,\n    .aaq-country-cell,\n    .aaq-usd-cell{\n        color:#69737b !important;\n    }\n\n    .aaq-market-inline{\n        display:inline-flex;\n        align-items:center;\n        gap:5px;\n        min-width:0;\n    }\n\n    .aaq-price-cell{\n        font-weight:800;\n        white-space:nowrap;\n    }\n\n    .aaq-usd-cell{\n        white-space:nowrap;\n    }\n\n    .aaq-empty{\n        padding:38px !important;\n        text-align:center !important;\n        color:#777 !important;\n    }\n\n    \/* =========================================================\n       PAGINATION\n       ========================================================= *\/\n\n    .aaq-pagination-row{\n        display:flex;\n        align-items:center;\n        justify-content:space-between;\n        gap:18px;\n        margin-top:17px;\n        color:#777;\n        font-size:13px;\n        line-height:1.3;\n    }\n\n    .aaq-pagination{\n        display:flex;\n        flex-wrap:wrap;\n        justify-content:flex-end;\n        gap:5px;\n    }\n\n    .aaq-pagebtn,\n    .aaq-pagegap{\n        min-width:39px;\n        height:39px;\n        padding:0 11px;\n        border:1px solid #d8ddda;\n        background:#fff;\n        color:#303433;\n        font-family:inherit;\n        font-size:13px;\n        font-weight:600;\n        line-height:1;\n    }\n\n    .aaq-pagebtn{\n        cursor:pointer;\n    }\n\n    .aaq-pagegap{\n        display:grid;\n        place-items:center;\n    }\n\n    .aaq-pagebtn:hover,\n    .aaq-pagebtn.is-active{\n        border-color:var(--aaq-green);\n        background:var(--aaq-green);\n        color:#fff;\n    }\n\n    .aaq-pagebtn:disabled{\n        background:#f4f4f4;\n        color:#999;\n        opacity:.6;\n        cursor:default;\n    }\n\n    \/* =========================================================\n       BUYING TIPS\n       ========================================================= *\/\n\n    .aaq-tips{\n        margin-top:56px;\n    }\n\n    .aaq-tipgrid{\n        display:grid;\n        grid-template-columns:repeat(3, minmax(0,1fr));\n        gap:20px;\n    }\n\n    .aaq-tipcard{\n        min-width:0;\n        min-height:144px;\n        padding:23px;\n        border:1px solid #efcb55;\n        border-radius:14px;\n        background:#fffaf0;\n    }\n\n    .aaq-tipcard h3{\n        margin:0 0 5px;\n        color:#333634;\n        font-size:18px;\n        font-weight:800;\n        line-height:1.3;\n    }\n\n    .aaq-tipcard .place{\n        margin-bottom:14px;\n        color:#7d807f;\n        font-size:14px;\n        line-height:1.35;\n    }\n\n    .aaq-tipcard strong{\n        display:block;\n        color:#9b3c09;\n        font-size:15.5px;\n        font-weight:800;\n        line-height:1.4;\n    }\n\n    .aaq-source{\n        margin-top:30px;\n        padding-top:17px;\n        border-top:1px solid #e0e5e2;\n        color:#6e7672;\n        font-size:12.5px;\n        line-height:1.6;\n    }\n\n    \/* =========================================================\n       LARGE TABLET \/ SMALL LAPTOP\n       ========================================================= *\/\n\n    @media (min-width:901px) and (max-width:1180px){\n        .aaq-mp__top{\n            padding:32px 0 25px;\n        }\n\n        .aaq-mp__body{\n            padding:31px 0 58px;\n        }\n\n        .aaq-mp__inner{\n            width:calc(100% - 32px);\n        }\n\n        .aaq-countrybar{\n            align-items:flex-start;\n            flex-direction:column;\n            gap:11px;\n            margin-bottom:30px;\n        }\n\n        .aaq-countrychips{\n            width:100%;\n        }\n\n        .aaq-dashboard{\n            grid-template-columns:1fr;\n            gap:42px;\n        }\n\n        .aaq-snapshot{\n            grid-template-columns:repeat(2, minmax(0,1fr));\n        }\n\n        .aaq-tipgrid{\n            grid-template-columns:repeat(2, minmax(0,1fr));\n        }\n\n        .aaq-col-country,\n        .aaq-col-usd,\n        .aaq-table td[data-label=\"Country\"],\n        .aaq-table td[data-label=\"Price USD\"]{\n            display:none;\n        }\n\n        .aaq-table{\n            table-layout:fixed;\n        }\n\n        .aaq-col-product{ width:22%; }\n        .aaq-col-category{ width:18%; }\n        .aaq-col-market{ width:27%; }\n        .aaq-col-xaf{ width:18%; }\n        .aaq-col-trend{ width:15%; }\n    }\n\n    \/* =========================================================\n       SMALL TABLET \/ LARGE PHONE\n       ========================================================= *\/\n\n    @media (min-width:769px) and (max-width:900px){\n        .aaq-mp__inner{\n            width:calc(100% - 28px);\n        }\n\n        .aaq-mp__header h1{\n            font-size:36px;\n        }\n\n        .aaq-countrybar{\n            display:block;\n            margin-bottom:30px;\n        }\n\n        .aaq-filter-title{\n            margin-bottom:12px;\n        }\n\n        .aaq-dashboard{\n            grid-template-columns:1fr;\n            gap:40px;\n        }\n\n        .aaq-tipgrid{\n            grid-template-columns:repeat(2, minmax(0,1fr));\n        }\n\n        .aaq-col-category,\n        .aaq-col-country,\n        .aaq-col-usd,\n        .aaq-table td[data-label=\"Category\"],\n        .aaq-table td[data-label=\"Country\"],\n        .aaq-table td[data-label=\"Price USD\"]{\n            display:none;\n        }\n\n        .aaq-table{\n            table-layout:fixed;\n        }\n\n        .aaq-col-product{ width:26%; }\n        .aaq-col-market{ width:34%; }\n        .aaq-col-xaf{ width:22%; }\n        .aaq-col-trend{ width:18%; }\n    }\n\n    \/* =========================================================\n       MOBILE <= 768\n       ========================================================= *\/\n\n    @media (max-width:768px){\n        .aaq-mp__top{\n            padding:28px 0 23px;\n        }\n\n        .aaq-mp__body{\n            padding:28px 0 48px;\n        }\n\n        .aaq-mp__inner{\n            width:calc(100% - 16px);\n            max-width:none;\n        }\n\n        \/* Header matches the supplied mobile screenshots *\/\n        .aaq-mp__header{\n            display:block;\n            margin-bottom:30px;\n        }\n\n        .aaq-mp__header h1{\n            margin:0 0 10px;\n            font-size:clamp(31px, 8vw, 42px);\n            line-height:1.04;\n        }\n\n        .aaq-mp__header p{\n            max-width:100%;\n            margin:0 0 29px;\n            font-size:clamp(16px, 4vw, 20px);\n            line-height:1.35;\n        }\n\n        .aaq-refresh{\n            width:auto;\n            min-height:50px;\n            margin:0;\n            padding:13px 21px;\n            font-size:clamp(15px, 4vw, 18px);\n        }\n\n        \/* Country chips *\/\n        .aaq-countrybar{\n            display:block;\n            margin:0 0 30px;\n        }\n\n        .aaq-filter-title{\n            margin-bottom:14px;\n            font-size:clamp(16px, 4vw, 20px);\n        }\n\n        .aaq-filter-globe{\n            width:21px;\n            height:21px;\n        }\n\n        .aaq-countrychips{\n            width:100%;\n            gap:9px;\n        }\n\n        .aaq-chip{\n            min-height:45px;\n            padding:10px 14px;\n            font-size:clamp(14px, 3.55vw, 17px);\n        }\n\n        \/* KPI: always three across like the screenshot *\/\n        .aaq-kpis{\n            grid-template-columns:repeat(3, minmax(0,1fr));\n            gap:10px;\n            margin-top:13px;\n        }\n\n        .aaq-kpi{\n            min-height:122px;\n            padding:12px 5px;\n            border-radius:18px;\n        }\n\n        .aaq-kpi strong{\n            margin-bottom:10px;\n            font-size:clamp(28px, 7vw, 38px);\n        }\n\n        .aaq-kpi span{\n            max-width:125px;\n            font-size:clamp(11px, 3vw, 16px);\n            line-height:1.3;\n        }\n\n        .aaq-updated{\n            margin:13px 2px 0;\n            text-align:right;\n            font-size:clamp(11px, 2.8vw, 14px);\n        }\n\n        \/* Dashboard *\/\n        .aaq-dashboard{\n            display:block;\n        }\n\n        .aaq-snapshot-panel{\n            margin-top:44px;\n        }\n\n        .aaq-section-title{\n            justify-content:flex-start;\n            text-align:left;\n            gap:10px;\n            font-size:clamp(24px, 6vw, 34px);\n        }\n\n        .aaq-heading-icon{\n            width:clamp(29px, 7vw, 37px);\n            height:clamp(29px, 7vw, 37px);\n        }\n\n        \/* Top movers remains 2 columns on mobile *\/\n        .aaq-movers{\n            grid-template-columns:repeat(2, minmax(0,1fr));\n            gap:14px;\n        }\n\n        .aaq-mover{\n            min-height:181px;\n            padding:20px 18px;\n            border-radius:17px;\n        }\n\n        .aaq-mover h3{\n            margin-bottom:6px;\n            font-size:clamp(16px, 4vw, 21px);\n        }\n\n        .aaq-mover .cat{\n            margin-bottom:17px;\n            font-size:clamp(13px, 3.3vw, 17px);\n        }\n\n        .aaq-mover .price{\n            font-size:clamp(17px, 4vw, 22px);\n        }\n\n        .aaq-trend{\n            font-size:clamp(14px, 3.6vw, 18px);\n        }\n\n        \/* Snapshot *\/\n        .aaq-panelhead{\n            align-items:center;\n            margin-bottom:18px;\n        }\n\n        .aaq-panelhead .aaq-section-title{\n            min-width:0;\n            margin-bottom:0;\n        }\n\n        .aaq-snapshot-country{\n            max-width:42%;\n            margin-top:0;\n            overflow:hidden;\n            text-overflow:ellipsis;\n            white-space:nowrap;\n            font-size:clamp(12px, 3.2vw, 16px);\n        }\n\n        .aaq-snapshot{\n            grid-template-columns:1fr;\n            gap:16px;\n        }\n\n        .aaq-snapcard{\n            padding:21px 17px;\n            border-radius:14px;\n        }\n\n        .aaq-snapcard h3{\n            margin-bottom:14px;\n            font-size:clamp(15px, 3.8vw, 19px);\n        }\n\n        .aaq-snaprow{\n            gap:8px;\n            padding:10px 0;\n        }\n\n        .aaq-snapname{\n            font-size:clamp(15px, 3.8vw, 20px);\n        }\n\n        .aaq-snapmarket{\n            font-size:clamp(12px, 3.2vw, 16px);\n        }\n\n        .aaq-snapprice{\n            font-size:clamp(14px, 3.6vw, 19px);\n        }\n\n        .aaq-pill{\n            padding:7px 10px;\n            font-size:clamp(11px, 3vw, 15px);\n        }\n\n        \/* Table *\/\n        .aaq-table-section{\n            margin-top:53px;\n        }\n\n        .aaq-filters{\n            display:block;\n            margin-bottom:48px;\n        }\n\n        .aaq-search{\n            display:block;\n            width:100%;\n            margin-bottom:31px;\n        }\n\n        .aaq-category-filter{\n            display:block;\n            width:71%;\n        }\n\n        .aaq-filters input,\n        .aaq-filters select{\n            height:clamp(56px, 13vw, 76px);\n            padding:0 18px;\n            border-radius:12px;\n            font-size:clamp(15px, 4vw, 20px);\n        }\n\n        .aaq-tablewrap{\n            width:100%;\n            border-radius:12px;\n            overflow:hidden;\n        }\n\n        .aaq-table{\n            display:table;\n            width:100%;\n            min-width:0;\n            table-layout:fixed;\n            font-size:clamp(12px, 3vw, 16px);\n        }\n\n        .aaq-table thead{ display:table-header-group; }\n        .aaq-table tbody{ display:table-row-group; }\n        .aaq-table tr{ display:table-row; }\n\n        .aaq-table th,\n        .aaq-table td{\n            display:table-cell;\n            width:auto;\n            padding:13px 8px;\n            text-align:left;\n            vertical-align:middle;\n            overflow:hidden;\n            text-overflow:ellipsis;\n        }\n\n        .aaq-table th{\n            font-size:clamp(12px, 3vw, 16px);\n            white-space:nowrap;\n        }\n\n        .aaq-table td{\n            font-size:clamp(12px, 3vw, 16px);\n        }\n\n        .aaq-table td::before{\n            display:none !important;\n            content:none !important;\n        }\n\n        .aaq-table td strong{\n            font-size:inherit;\n            font-weight:500;\n        }\n\n        \/* Mobile screenshot shows only these 4 columns *\/\n        .aaq-col-category,\n        .aaq-col-country,\n        .aaq-col-usd,\n        .aaq-table td[data-label=\"Category\"],\n        .aaq-table td[data-label=\"Country\"],\n        .aaq-table td[data-label=\"Price USD\"]{\n            display:none !important;\n        }\n\n        .aaq-col-product{ width:27%; }\n        .aaq-col-market{ width:34%; }\n        .aaq-col-xaf{ width:22%; }\n        .aaq-col-trend{ width:17%; }\n\n        .aaq-market-cell{\n            white-space:normal;\n        }\n\n        .aaq-market-inline{\n            align-items:flex-start;\n        }\n\n        .aaq-price-cell{\n            white-space:normal;\n        }\n\n        .aaq-table .aaq-pill{\n            max-width:100%;\n            padding:6px 7px;\n            font-size:clamp(10px, 2.7vw, 14px);\n        }\n\n        .aaq-empty{\n            display:table-cell !important;\n            width:100% !important;\n            padding:30px 12px !important;\n            text-align:center !important;\n        }\n\n        \/* Pagination *\/\n        .aaq-pagination-row{\n            flex-direction:column;\n            align-items:center;\n            justify-content:center;\n            gap:16px;\n            margin-top:23px;\n            font-size:clamp(12px, 3vw, 16px);\n            text-align:center;\n        }\n\n        .aaq-pagination{\n            justify-content:center;\n        }\n\n        .aaq-pagebtn,\n        .aaq-pagegap{\n            min-width:49px;\n            height:48px;\n            padding:0 12px;\n            font-size:clamp(12px, 3.4vw, 17px);\n        }\n\n        \/* Buying tips *\/\n        .aaq-tips{\n            margin-top:64px;\n        }\n\n        .aaq-tipgrid{\n            grid-template-columns:1fr;\n            gap:31px;\n        }\n\n        .aaq-tipcard{\n            min-height:137px;\n            padding:25px 26px;\n            border-radius:16px;\n        }\n\n        .aaq-tipcard h3{\n            font-size:clamp(18px, 4.5vw, 23px);\n        }\n\n        .aaq-tipcard .place{\n            font-size:clamp(14px, 3.5vw, 18px);\n        }\n\n        .aaq-tipcard strong{\n            font-size:clamp(15px, 3.8vw, 19px);\n        }\n\n        .aaq-source{\n            font-size:11.5px;\n        }\n    }\n\n    \/* =========================================================\n       VERY SMALL PHONES <= 480\n       ========================================================= *\/\n\n    @media (max-width:480px){\n        .aaq-mp__inner{\n            width:calc(100% - 12px);\n        }\n\n        .aaq-mp__header h1{\n            font-size:31px;\n        }\n\n        .aaq-mp__header p{\n            font-size:16px;\n        }\n\n        .aaq-refresh{\n            min-height:48px;\n            padding:12px 17px;\n            font-size:15px;\n        }\n\n        .aaq-countrychips{\n            gap:7px;\n        }\n\n        .aaq-chip{\n            min-height:42px;\n            padding:9px 11px;\n            font-size:13px;\n        }\n\n        .aaq-kpis{\n            gap:6px;\n        }\n\n        .aaq-kpi{\n            min-height:104px;\n            border-radius:13px;\n        }\n\n        .aaq-kpi strong{\n            font-size:27px;\n        }\n\n        .aaq-kpi span{\n            font-size:11px;\n        }\n\n        .aaq-movers{\n            gap:9px;\n        }\n\n        .aaq-mover{\n            min-height:158px;\n            padding:16px 12px;\n        }\n\n        .aaq-mover h3{ font-size:15px; }\n        .aaq-mover .cat{ font-size:12px; }\n        .aaq-mover .price{ font-size:15px; }\n        .aaq-trend{ font-size:13px; }\n\n        .aaq-section-title{\n            font-size:23px;\n        }\n\n        .aaq-heading-icon{\n            width:29px;\n            height:29px;\n        }\n\n        .aaq-category-filter{\n            width:100%;\n        }\n\n        .aaq-filters{\n            margin-bottom:40px;\n        }\n\n        .aaq-search{\n            margin-bottom:20px;\n        }\n\n        .aaq-table th,\n        .aaq-table td{\n            padding:11px 5px;\n            font-size:11.5px;\n        }\n\n        .aaq-col-product{ width:28%; }\n        .aaq-col-market{ width:31%; }\n        .aaq-col-xaf{ width:23%; }\n        .aaq-col-trend{ width:18%; }\n\n        .aaq-table .aaq-pill{\n            padding:5px 4px;\n            font-size:10px;\n        }\n\n        .aaq-pagebtn,\n        .aaq-pagegap{\n            min-width:42px;\n            height:43px;\n            padding:0 9px;\n            font-size:13px;\n        }\n\n        .aaq-tipgrid{\n            gap:20px;\n        }\n    }\n\n    \/* =========================================================\n       EXTREMELY SMALL PHONES <= 360\n       ========================================================= *\/\n\n    @media (max-width:360px){\n        .aaq-mp__inner{\n            width:calc(100% - 8px);\n        }\n\n        .aaq-chip{\n            font-size:12px;\n        }\n\n        .aaq-kpi strong{\n            font-size:24px;\n        }\n\n        .aaq-kpi span{\n            font-size:10px;\n        }\n\n        .aaq-mover{\n            padding:14px 9px;\n        }\n\n        .aaq-mover h3{\n            font-size:14px;\n        }\n\n        .aaq-mover .price{\n            font-size:14px;\n        }\n\n        .aaq-table th,\n        .aaq-table td{\n            padding:10px 3px;\n            font-size:10.5px;\n        }\n\n        .aaq-pagebtn,\n        .aaq-pagegap{\n            min-width:38px;\n            height:40px;\n            padding:0 7px;\n            font-size:12px;\n        }\n    }\n\n\n    \/* =========================================================\n       AFRIQAGRO \u2014 FINAL FULL-WIDTH + LARGE-SIZE CORRECTION\n       ---------------------------------------------------------\n       PURPOSE\n       1. Break the shortcode out of Elementor\/OceanWP boxed\n          containers so the background reaches both screen edges.\n       2. Keep the actual dashboard content centered and wide.\n       3. Increase typography\/card sizing to match the supplied\n          desktop screenshot more closely.\n       4. Preserve professional tablet\/mobile responsiveness.\n       ========================================================= *\/\n\n    \/* ---------- TRUE VIEWPORT WIDTH ---------- *\/\n\n    .aaq-mp{\n        position:relative;\n        left:50%;\n\n        width:100vw !important;\n        max-width:100vw !important;\n\n        margin-left:-50vw !important;\n        margin-right:-50vw !important;\n        margin-top:0 !important;\n        margin-bottom:0 !important;\n\n        overflow:hidden;\n\n        font-size:18px;\n        line-height:1.5;\n    }\n\n    html:has(.aaq-mp),\n    body:has(.aaq-mp){\n        overflow-x:clip !important;\n    }\n\n    \/* Let the shortcode escape Elementor\/OceanWP wrappers. *\/\n    .elementor-widget-shortcode:has(.aaq-mp),\n    .elementor-widget-shortcode:has(.aaq-mp) > .elementor-widget-container,\n    .elementor-shortcode:has(.aaq-mp),\n    .e-con:has(.aaq-mp),\n    .e-con-inner:has(.aaq-mp),\n    .elementor-section:has(.aaq-mp),\n    .elementor-container:has(.aaq-mp),\n    .elementor-column:has(.aaq-mp),\n    .elementor-widget-wrap:has(.aaq-mp){\n        overflow:visible !important;\n    }\n\n    .elementor-widget-shortcode:has(.aaq-mp),\n    .elementor-widget-shortcode:has(.aaq-mp) > .elementor-widget-container,\n    .elementor-shortcode:has(.aaq-mp){\n        width:100% !important;\n        max-width:none !important;\n        margin-left:0 !important;\n        margin-right:0 !important;\n        padding-left:0 !important;\n        padding-right:0 !important;\n    }\n\n    \/* ---------- WIDER DESKTOP CONTENT ---------- *\/\n\n    .aaq-mp__inner{\n        width:min(1760px, calc(100% - 52px));\n        max-width:1760px;\n        margin-left:auto;\n        margin-right:auto;\n    }\n\n    .aaq-mp__top{\n        padding-top:44px;\n        padding-bottom:31px;\n    }\n\n    .aaq-mp__body{\n        padding-top:40px;\n        padding-bottom:82px;\n    }\n\n    \/* ---------- HEADER \/ FILTER SIZE ---------- *\/\n\n    .aaq-mp__header h1{\n        font-size:clamp(40px, 2.7vw, 50px);\n        line-height:1.04;\n    }\n\n    .aaq-mp__header p{\n        font-size:clamp(18px, 1.15vw, 21px);\n        line-height:1.45;\n    }\n\n    .aaq-refresh{\n        min-height:52px;\n        padding:14px 22px;\n        font-size:17px;\n    }\n\n    .aaq-filter-title{\n        font-size:17px;\n    }\n\n    .aaq-filter-globe{\n        width:20px;\n        height:20px;\n    }\n\n    .aaq-chip{\n        min-height:46px;\n        padding:11px 17px;\n        font-size:16px;\n    }\n\n    .aaq-loading{\n        font-size:17px;\n    }\n\n    .aaq-alert{\n        font-size:16px;\n    }\n\n    \/* ---------- KPI CARDS ---------- *\/\n\n    .aaq-kpis{\n        gap:24px;\n    }\n\n    .aaq-kpi{\n        min-height:138px;\n        padding:22px;\n    }\n\n    .aaq-kpi strong{\n        font-size:clamp(38px, 2.7vw, 46px);\n    }\n\n    .aaq-kpi span{\n        font-size:17px;\n    }\n\n    .aaq-updated{\n        font-size:14px;\n    }\n\n    \/* ---------- SECTION TITLES ---------- *\/\n\n    .aaq-section-title{\n        font-size:clamp(29px, 1.9vw, 34px);\n        margin-bottom:23px;\n    }\n\n    .aaq-heading-icon{\n        width:33px;\n        height:33px;\n    }\n\n    \/* ---------- DASHBOARD CARDS ---------- *\/\n\n    .aaq-dashboard{\n        gap:34px;\n    }\n\n    .aaq-movers,\n    .aaq-snapshot{\n        gap:20px;\n    }\n\n    .aaq-mover{\n        min-height:160px;\n        padding:22px;\n    }\n\n    .aaq-mover h3{\n        font-size:19px;\n    }\n\n    .aaq-mover .cat{\n        font-size:15px;\n    }\n\n    .aaq-mover .price{\n        font-size:21px;\n    }\n\n    .aaq-trend{\n        font-size:16px;\n    }\n\n    .aaq-snapshot-country{\n        font-size:16px;\n    }\n\n    .aaq-snapcard{\n        padding:19px 20px 17px;\n    }\n\n    .aaq-snapcard h3{\n        font-size:17px;\n    }\n\n    .aaq-snapname,\n    .aaq-snapprice{\n        font-size:16px;\n    }\n\n    .aaq-snapmarket{\n        font-size:14px;\n    }\n\n    .aaq-pill{\n        font-size:13px;\n        padding:7px 10px;\n    }\n\n    \/* ---------- SEARCH \/ FILTERS ---------- *\/\n\n    .aaq-filters input,\n    .aaq-filters select{\n        height:56px;\n        padding-left:20px;\n        padding-right:20px;\n        font-size:17px;\n    }\n\n    \/* ---------- TABLE ---------- *\/\n\n    .aaq-table{\n        font-size:16px;\n    }\n\n    .aaq-table th{\n        padding:16px 18px;\n        font-size:16px;\n    }\n\n    .aaq-table td{\n        padding:15px 18px;\n        font-size:16px;\n        line-height:1.42;\n    }\n\n    .aaq-categorytag{\n        font-size:13px;\n        padding:5px 10px;\n    }\n\n    .aaq-pagination-row{\n        font-size:15px;\n    }\n\n    .aaq-pagebtn,\n    .aaq-pagegap{\n        min-width:43px;\n        height:43px;\n        font-size:15px;\n    }\n\n    \/* ---------- BUYING TIPS \/ SOURCE ---------- *\/\n\n    .aaq-tipgrid{\n        gap:23px;\n    }\n\n    .aaq-tipcard{\n        min-height:160px;\n        padding:26px;\n    }\n\n    .aaq-tipcard h3{\n        font-size:20px;\n    }\n\n    .aaq-tipcard .place{\n        font-size:16px;\n    }\n\n    .aaq-tipcard strong{\n        font-size:17px;\n    }\n\n    .aaq-source{\n        font-size:14px;\n    }\n\n    \/* =========================================================\n       TABLET \/ SMALL LAPTOP \u2014 FINAL OVERRIDES\n       ========================================================= *\/\n\n    @media (max-width:1180px){\n\n        .aaq-mp__inner{\n            width:calc(100% - 28px);\n            max-width:none;\n        }\n\n        .aaq-mp__header h1{\n            font-size:clamp(36px, 4vw, 46px);\n        }\n\n        .aaq-mp__header p{\n            font-size:18px;\n        }\n\n        .aaq-chip{\n            font-size:15px;\n        }\n\n        .aaq-kpi span{\n            font-size:16px;\n        }\n\n        .aaq-section-title{\n            font-size:clamp(27px, 3vw, 33px);\n        }\n\n        .aaq-table th,\n        .aaq-table td{\n            font-size:15px;\n        }\n    }\n\n    \/* =========================================================\n       PHONE \u2014 FINAL OVERRIDES\n       ========================================================= *\/\n\n    @media (max-width:768px){\n\n        .aaq-mp{\n            font-size:17px;\n        }\n\n        .aaq-mp__inner{\n            width:calc(100% - 16px);\n            max-width:none;\n        }\n\n        .aaq-mp__top{\n            padding-top:31px;\n            padding-bottom:25px;\n        }\n\n        .aaq-mp__body{\n            padding-top:31px;\n            padding-bottom:52px;\n        }\n\n        .aaq-mp__header h1{\n            font-size:clamp(34px, 9vw, 46px);\n        }\n\n        .aaq-mp__header p{\n            font-size:clamp(17px, 4.4vw, 21px);\n        }\n\n        .aaq-refresh{\n            min-height:52px;\n            font-size:clamp(16px, 4.1vw, 19px);\n        }\n\n        .aaq-filter-title{\n            font-size:clamp(17px, 4.3vw, 20px);\n        }\n\n        .aaq-chip{\n            min-height:47px;\n            padding:11px 15px;\n            font-size:clamp(14px, 3.7vw, 18px);\n        }\n\n        .aaq-kpi{\n            min-height:132px;\n        }\n\n        .aaq-kpi strong{\n            font-size:clamp(31px, 8vw, 42px);\n        }\n\n        .aaq-kpi span{\n            font-size:clamp(12px, 3.2vw, 16px);\n        }\n\n        .aaq-section-title{\n            font-size:clamp(26px, 6.4vw, 35px);\n        }\n\n        .aaq-mover{\n            min-height:190px;\n        }\n\n        .aaq-mover h3{\n            font-size:clamp(17px, 4.3vw, 22px);\n        }\n\n        .aaq-mover .cat{\n            font-size:clamp(13px, 3.4vw, 16px);\n        }\n\n        .aaq-mover .price{\n            font-size:clamp(17px, 4.3vw, 22px);\n        }\n\n        .aaq-trend{\n            font-size:clamp(14px, 3.5vw, 17px);\n        }\n\n        .aaq-filters input,\n        .aaq-filters select{\n            height:56px;\n            font-size:16px;\n        }\n\n        .aaq-table th,\n        .aaq-table td{\n            font-size:clamp(12px, 3.15vw, 15px);\n        }\n\n        .aaq-tipcard h3{\n            font-size:clamp(19px, 4.8vw, 23px);\n        }\n\n        .aaq-tipcard .place,\n        .aaq-tipcard strong{\n            font-size:clamp(14px, 3.7vw, 17px);\n        }\n\n        .aaq-source{\n            font-size:13px;\n        }\n    }\n\n    \/* =========================================================\n       VERY SMALL PHONES \u2014 KEEP READABLE, NOT TINY\n       ========================================================= *\/\n\n    @media (max-width:480px){\n\n        .aaq-mp__inner{\n            width:calc(100% - 12px);\n        }\n\n        .aaq-mp__header h1{\n            font-size:34px;\n        }\n\n        .aaq-mp__header p{\n            font-size:17px;\n        }\n\n        .aaq-refresh{\n            font-size:16px;\n        }\n\n        .aaq-chip{\n            font-size:14px;\n        }\n\n        .aaq-kpi strong{\n            font-size:29px;\n        }\n\n        .aaq-kpi span{\n            font-size:12px;\n        }\n\n        .aaq-section-title{\n            font-size:25px;\n        }\n\n        .aaq-mover h3{\n            font-size:16px;\n        }\n\n        .aaq-mover .cat{\n            font-size:13px;\n        }\n\n        .aaq-mover .price{\n            font-size:16px;\n        }\n\n        .aaq-trend{\n            font-size:14px;\n        }\n\n        .aaq-table th,\n        .aaq-table td{\n            font-size:12px;\n        }\n\n        .aaq-pagebtn,\n        .aaq-pagegap{\n            min-width:42px;\n            height:43px;\n            font-size:14px;\n        }\n    }\n\n    <\/style>\n\n    <script>\n    (function(){\n        const root = document.getElementById('aaqMarketPrices');\n\n        if (!root || root.dataset.ready === '1') {\n            return;\n        }\n\n        root.dataset.ready = '1';\n\n        const AJAX_URL = \"https:\\\/\\\/afriqagro.com\\\/wp-admin\\\/admin-ajax.php\";\n        const NONCE = \"8614c05637\";\n        const COUNTRY_META = {\"CMR\":{\"name\":\"Cameroon\",\"short\":\"Cameroon\",\"flag\":\"\\ud83c\\udde8\\ud83c\\uddf2\"},\"TCD\":{\"name\":\"Chad\",\"short\":\"Chad\",\"flag\":\"\\ud83c\\uddf9\\ud83c\\udde9\"},\"CAF\":{\"name\":\"Central African Rep.\",\"short\":\"CAR\",\"flag\":\"\\ud83c\\udde8\\ud83c\\uddeb\"},\"COG\":{\"name\":\"Rep. of Congo\",\"short\":\"Rep. of Congo\",\"flag\":\"\\ud83c\\udde8\\ud83c\\uddec\"},\"GAB\":{\"name\":\"Gabon\",\"short\":\"Gabon\",\"flag\":\"\\ud83c\\uddec\\ud83c\\udde6\"},\"GNQ\":{\"name\":\"Equatorial Guinea\",\"short\":\"Equatorial Guinea\",\"flag\":\"\\ud83c\\uddec\\ud83c\\uddf6\"}};\n        const COUNTRY_CODES = Object.keys(COUNTRY_META);\n        const PAGE_SIZE = 20;\n\n        const state = {\n            payloads: {},\n            records: [],\n            selectedCountry: 'all',\n            search: '',\n            category: 'all',\n            page: 1,\n            xafUsd: 0,\n            failures: []\n        };\n\n        const el = id => document.getElementById(id);\n\n        const loading = el('aaqLoading');\n        const alertBox = el('aaqAlert');\n        const kpis = el('aaqKpis');\n        const updated = el('aaqUpdated');\n        const dashboard = el('aaqDashboard');\n        const tableSection = el('aaqTableSection');\n        const tipsSection = el('aaqTipsSection');\n        const sourceBox = el('aaqSource');\n        const refreshBtn = el('aaqRefreshPrices');\n        const searchInput = el('aaqSearch');\n        const categorySelect = el('aaqCategory');\n\n        function esc(value){\n            return String(value == null ? '' : value)\n                .replace(\/&\/g, '&amp;')\n                .replace(\/<\/g, '&lt;')\n                .replace(\/>\/g, '&gt;')\n                .replace(\/\"\/g, '&quot;')\n                .replace(\/'\/g, '&#039;');\n        }\n\n        function num(value, digits){\n            const n = Number(value || 0);\n\n            return new Intl.NumberFormat('en-US', {\n                maximumFractionDigits: digits == null\n                    ? (Math.abs(n) < 10 ? 2 : 0)\n                    : digits\n            }).format(n);\n        }\n\n        function unitLabel(unit){\n            let u = String(unit || 'unit').trim();\n\n            if (!u) {\n                return 'unit';\n            }\n\n            const lower = u.toLowerCase().replace(\/\\s+\/g, ' ').trim();\n\n            const exact = {\n                kg: 'kg',\n                kilogram: 'kg',\n                kilograms: 'kg',\n                g: 'g',\n                gram: 'g',\n                grams: 'g',\n                l: 'litre',\n                liter: 'litre',\n                litre: 'litre',\n                liters: 'litre',\n                litres: 'litre',\n                unit: 'unit',\n                bunch: 'bunch'\n            };\n\n            if (exact[lower]) {\n                return exact[lower];\n            }\n\n            if (\/\\bkg\\b|kilogram\/.test(lower)) {\n                return 'kg';\n            }\n\n            if (\/\\bl\\b|litre|liter\/.test(lower)) {\n                return 'litre';\n            }\n\n            if (\/bunch\/.test(lower)) {\n                return 'bunch';\n            }\n\n            return u;\n        }\n\n        function trendMeta(value){\n            if (value == null || !Number.isFinite(Number(value))) {\n                return { cls: 'flat', arrow: '\u2192', text: 'n\/a' };\n            }\n\n            const v = Number(value);\n\n            if (v > 0.05) {\n                return { cls: 'up', arrow: '\u2197', text: '+' + Math.abs(v).toFixed(1) + '%' };\n            }\n\n            if (v < -0.05) {\n                return { cls: 'down', arrow: '\u2198', text: '-' + Math.abs(v).toFixed(1) + '%' };\n            }\n\n            return { cls: 'flat', arrow: '\u2192', text: '0.0%' };\n        }\n\n        function pinSvg(){\n            return '<svg class=\"aaq-pin\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 2a7 7 0 0 0-7 7c0 5.1 7 13 7 13s7-7.9 7-13a7 7 0 0 0-7-7zm0 9.5A2.5 2.5 0 1 1 12 6a2.5 2.5 0 0 1 0 5.5z\"\/><\/svg>';\n        }\n\n        async function fetchCountry(code, force){\n            const url = new URL(AJAX_URL, window.location.href);\n\n            url.searchParams.set('action', 'afriqagro_market_prices_country');\n            url.searchParams.set('nonce', NONCE);\n            url.searchParams.set('country', code);\n\n            if (force) {\n                url.searchParams.set('force', '1');\n            }\n\n            const res = await fetch(url.toString(), {\n                credentials: 'same-origin',\n                cache: 'no-store'\n            });\n\n            if (!res.ok) {\n                throw new Error('HTTP ' + res.status);\n            }\n\n            const json = await res.json();\n\n            if (!json.success) {\n                throw new Error(\n                    json && json.data && json.data.message\n                        ? json.data.message\n                        : 'Provider request failed'\n                );\n            }\n\n            return json.data;\n        }\n\n        async function loadAll(force){\n            loading.hidden = false;\n            alertBox.hidden = true;\n            refreshBtn.disabled = true;\n            state.failures = [];\n\n            const settled = await Promise.allSettled(\n                COUNTRY_CODES.map(code => fetchCountry(code, !!force))\n            );\n\n            state.payloads = {};\n            state.records = [];\n            state.xafUsd = 0;\n\n            settled.forEach((result, index) => {\n                const code = COUNTRY_CODES[index];\n\n                if (result.status === 'fulfilled') {\n                    state.payloads[code] = result.value;\n\n                    if (Array.isArray(result.value.records)) {\n                        state.records.push(...result.value.records);\n                    }\n\n                    if (result.value.fx && Number(result.value.fx.rate) > 0) {\n                        state.xafUsd = Number(result.value.fx.rate);\n                    }\n                } else {\n                    state.failures.push(code);\n                }\n            });\n\n            loading.hidden = true;\n            refreshBtn.disabled = false;\n\n            if (!state.records.length) {\n                alertBox.hidden = false;\n                alertBox.innerHTML = '<strong>Live market data could not be loaded.<\/strong> No fake prices were inserted. Please try Refresh prices.';\n\n                kpis.hidden = true;\n                dashboard.hidden = true;\n                tableSection.hidden = true;\n                tipsSection.hidden = true;\n                sourceBox.hidden = true;\n                return;\n            }\n\n            if (state.failures.length) {\n                const names = state.failures\n                    .map(code => COUNTRY_META[code] ? COUNTRY_META[code].name : code)\n                    .join(', ');\n\n                alertBox.hidden = false;\n                alertBox.innerHTML = 'Market records loaded, but no usable provider response was returned for: <strong>' + esc(names) + '<\/strong>.';\n            }\n\n            kpis.hidden = false;\n            updated.hidden = false;\n            dashboard.hidden = false;\n            tableSection.hidden = false;\n            tipsSection.hidden = false;\n            sourceBox.hidden = false;\n\n            buildCategorySelect();\n            render();\n        }\n\n        function countryRecords(){\n            if (state.selectedCountry === 'all') {\n                return state.records.slice();\n            }\n\n            return state.records.filter(r => r.country_code === state.selectedCountry);\n        }\n\n        function filteredRecords(){\n            let rows = countryRecords();\n            const q = state.search.trim().toLowerCase();\n\n            if (q) {\n                rows = rows.filter(r =>\n                    [\n                        r.commodity,\n                        r.market,\n                        r.country_name,\n                        r.country_short,\n                        r.category,\n                        r.admin1,\n                        r.admin2\n                    ].some(v => String(v || '').toLowerCase().includes(q))\n                );\n            }\n\n            if (state.category !== 'all') {\n                rows = rows.filter(r => r.category === state.category);\n            }\n\n            return rows;\n        }\n\n        function buildCategorySelect(){\n            const current = state.category;\n\n            const cats = [...new Set(\n                state.records.map(r => r.category).filter(Boolean)\n            )].sort((a,b) => categoryOrder(a) - categoryOrder(b) || a.localeCompare(b));\n\n            categorySelect.innerHTML =\n                '<option value=\"all\">All<\/option>' +\n                cats.map(c => '<option value=\"' + esc(c) + '\">' + esc(c) + '<\/option>').join('');\n\n            if (cats.includes(current)) {\n                categorySelect.value = current;\n            } else {\n                state.category = 'all';\n                categorySelect.value = 'all';\n            }\n        }\n\n        function render(){\n            const rows = countryRecords();\n\n            renderKpis(rows);\n            renderUpdated(rows);\n            renderMovers(rows);\n            renderSnapshot(rows);\n            renderTable();\n            renderTips(rows);\n            updateCountryLabel();\n        }\n\n        function renderKpis(rows){\n            const products = new Set(\n                rows.map(r => String(r.commodity || '').toLowerCase()).filter(Boolean)\n            );\n\n            const markets = new Set(\n                rows.map(r => r.country_code + '|' + String(r.market || '').toLowerCase())\n            );\n\n            const countries = new Set(\n                rows.map(r => r.country_code).filter(Boolean)\n            );\n\n            el('aaqProductsCount').textContent = products.size;\n            el('aaqMarketsCount').textContent = markets.size;\n            el('aaqCountriesCount').textContent = countries.size;\n        }\n\n        function renderUpdated(rows){\n            const now = new Date();\n\n            const stamp = new Intl.DateTimeFormat(undefined, {\n                month: 'long',\n                day: 'numeric',\n                hour: '2-digit',\n                minute: '2-digit'\n            }).format(now);\n\n            const dates = rows.map(r => r.date).filter(Boolean).sort();\n            const latestProviderDate = dates.length ? dates[dates.length - 1] : '';\n\n            updated.textContent = 'Last updated: ' + stamp;\n\n            if (latestProviderDate) {\n                updated.title = 'Latest provider record date: ' + latestProviderDate;\n            }\n        }\n\n        function renderMovers(rows){\n            const valid = rows.filter(r => Number.isFinite(Number(r.trend)));\n\n            let movers = valid\n                .filter(r => Number(r.trend) > 0.05)\n                .sort((a,b) => Number(b.trend) - Number(a.trend))\n                .slice(0, 8);\n\n            if (!movers.length) {\n                movers = valid\n                    .sort((a,b) => Math.abs(Number(b.trend)) - Math.abs(Number(a.trend)))\n                    .slice(0, 8);\n            }\n\n            if (!movers.length) {\n                el('aaqMovers').innerHTML = '<div class=\"aaq-alert\">Trend comparison requires at least two reporting periods for the same product and market.<\/div>';\n                return;\n            }\n\n            el('aaqMovers').innerHTML = movers.map(r => {\n                const t = trendMeta(r.trend);\n\n                return (\n                    '<article class=\"aaq-mover ' + (t.cls === 'down' ? 'is-down' : '') + '\">' +\n                        '<h3>' + esc(r.commodity) + '<\/h3>' +\n                        '<div class=\"cat\">' + esc(r.category) + '<\/div>' +\n                        '<div class=\"price\">' + num(r.price) + ' ' + esc(r.currency) + '<\/div>' +\n                        '<div class=\"aaq-trend ' + esc(t.cls) + '\">' + t.arrow + ' ' + esc(t.text) + '<\/div>' +\n                    '<\/article>'\n                );\n            }).join('');\n        }\n\n        function categoryOrder(name){\n            const order = [\n                'Grains',\n                'Roots & Tubers',\n                'Fruits',\n                'Vegetables',\n                'Vegetables & Fruits',\n                'Cash Crops',\n                'Pulses & Nuts',\n                'Oils',\n                'Livestock',\n                'Animal Products',\n                'Other'\n            ];\n\n            const index = order.indexOf(name);\n            return index === -1 ? 999 : index;\n        }\n\n        function renderSnapshot(rows){\n            const groups = {};\n\n            rows.forEach(r => {\n                const category = r.category || 'Other';\n\n                if (!groups[category]) {\n                    groups[category] = [];\n                }\n\n                groups[category].push(r);\n            });\n\n            const cats = Object.keys(groups)\n                .sort((a,b) => categoryOrder(a) - categoryOrder(b) || a.localeCompare(b))\n                .slice(0, 8);\n\n            if (!cats.length) {\n                el('aaqSnapshot').innerHTML = '';\n                return;\n            }\n\n            el('aaqSnapshot').innerHTML = cats.map(cat => {\n                const items = groups[cat]\n                    .slice()\n                    .sort((a,b) => {\n                        const ta = Number.isFinite(Number(a.trend)) ? Math.abs(Number(a.trend)) : -1;\n                        const tb = Number.isFinite(Number(b.trend)) ? Math.abs(Number(b.trend)) : -1;\n                        return tb - ta;\n                    })\n                    .slice(0, 4);\n\n                return (\n                    '<article class=\"aaq-snapcard\">' +\n                        '<h3>' + esc(cat) + '<\/h3>' +\n                        items.map(r => {\n                            const t = trendMeta(r.trend);\n\n                            return (\n                                '<div class=\"aaq-snaprow\">' +\n                                    '<div class=\"aaq-snapleft\">' +\n                                        '<div class=\"aaq-snapname\">' + esc(r.commodity) + '<\/div>' +\n                                        '<div class=\"aaq-snapmarket\">' + pinSvg() + '<span>' + esc(r.market) + '<\/span><\/div>' +\n                                    '<\/div>' +\n                                    '<div class=\"aaq-snapright\">' +\n                                        '<div class=\"aaq-snapprice\">' + num(r.price) + ' \/' + esc(unitLabel(r.unit)) + '<\/div>' +\n                                        '<span class=\"aaq-pill ' + esc(t.cls) + '\">' + t.arrow + ' ' + esc(t.text) + '<\/span>' +\n                                    '<\/div>' +\n                                '<\/div>'\n                            );\n                        }).join('') +\n                    '<\/article>'\n                );\n            }).join('');\n        }\n\n        function updateCountryLabel(){\n            let label = '\ud83c\udf0d All countries';\n\n            if (state.selectedCountry !== 'all') {\n                const info = COUNTRY_META[state.selectedCountry] || {};\n                label = (info.flag || '') + ' ' + (info.name || state.selectedCountry);\n            }\n\n            el('aaqSnapshotCountry').textContent = label;\n        }\n\n        function renderTable(){\n            let rows = filteredRecords();\n\n            rows.sort((a,b) =>\n                categoryOrder(a.category) - categoryOrder(b.category) ||\n                String(a.commodity || '').localeCompare(String(b.commodity || '')) ||\n                String(a.country_name || '').localeCompare(String(b.country_name || '')) ||\n                String(a.market || '').localeCompare(String(b.market || ''))\n            );\n\n            const total = rows.length;\n            const pages = Math.max(1, Math.ceil(total \/ PAGE_SIZE));\n\n            if (state.page > pages) {\n                state.page = pages;\n            }\n\n            if (state.page < 1) {\n                state.page = 1;\n            }\n\n            const start = (state.page - 1) * PAGE_SIZE;\n            const pageRows = rows.slice(start, start + PAGE_SIZE);\n            const body = el('aaqTableBody');\n\n            if (!pageRows.length) {\n                body.innerHTML =\n                    '<tr><td class=\"aaq-empty\" colspan=\"7\">' +\n                    'No matching market-price records were returned by the live data source.' +\n                    '<\/td><\/tr>';\n            } else {\n                body.innerHTML = pageRows.map(r => {\n                    const t = trendMeta(r.trend);\n                    const currency = String(r.currency || '').toUpperCase();\n                    const usd = state.xafUsd > 0 && currency === 'XAF'\n                        ? Number(r.price) * state.xafUsd\n                        : null;\n\n                    const countryLabel =\n                        (r.country_flag || '') + ' ' +\n                        (r.country_short || r.country_name || '');\n\n                    return (\n                        '<tr>' +\n                            '<td data-label=\"Product\"><strong>' + esc(r.commodity) + '<\/strong><\/td>' +\n                            '<td data-label=\"Category\"><span class=\"aaq-categorytag\">' + esc(r.category) + '<\/span><\/td>' +\n                            '<td data-label=\"Market\" class=\"aaq-market-cell\"><span class=\"aaq-market-inline\">' + pinSvg() + '<span>' + esc(r.market) + '<\/span><\/span><\/td>' +\n                            '<td data-label=\"Country\" class=\"aaq-country-cell\">' + esc(countryLabel) + '<\/td>' +\n                            '<td data-label=\"Price XAF\" class=\"aaq-price-cell\">' + num(r.price) + ' \/' + esc(unitLabel(r.unit)) + '<\/td>' +\n                            '<td data-label=\"Price USD\" class=\"aaq-usd-cell\">' + (usd == null ? '\u2014' : '$' + num(usd, 2)) + '<\/td>' +\n                            '<td data-label=\"Trend\"><span class=\"aaq-pill ' + esc(t.cls) + '\">' + t.arrow + ' ' + esc(t.text) + '<\/span><\/td>' +\n                        '<\/tr>'\n                    );\n                }).join('');\n            }\n\n            el('aaqResultCount').textContent = total\n                ? 'Showing ' + (start + 1) + '\u2013' + Math.min(start + PAGE_SIZE, total) + ' of ' + total + ' result(s)'\n                : '0 results';\n\n            renderPagination(pages);\n        }\n\n        function renderPagination(pages){\n            const nav = el('aaqPagination');\n\n            if (pages <= 1) {\n                nav.innerHTML = '';\n                return;\n            }\n\n            const items = [];\n\n            items.push(\n                '<button class=\"aaq-pagebtn\" data-page=\"' + (state.page - 1) + '\" ' +\n                (state.page === 1 ? 'disabled' : '') +\n                '>\u2039 Previous<\/button>'\n            );\n\n            const candidates = new Set([\n                1,\n                pages,\n                state.page - 1,\n                state.page,\n                state.page + 1\n            ]);\n\n            const list = [...candidates]\n                .filter(n => n >= 1 && n <= pages)\n                .sort((a,b) => a - b);\n\n            let previous = 0;\n\n            list.forEach(n => {\n                if (previous && n - previous > 1) {\n                    items.push('<span class=\"aaq-pagegap\">\u2026<\/span>');\n                }\n\n                items.push(\n                    '<button class=\"aaq-pagebtn ' + (n === state.page ? 'is-active' : '') + '\" data-page=\"' + n + '\">' + n + '<\/button>'\n                );\n\n                previous = n;\n            });\n\n            items.push(\n                '<button class=\"aaq-pagebtn\" data-page=\"' + (state.page + 1) + '\" ' +\n                (state.page === pages ? 'disabled' : '') +\n                '>Next \u203a<\/button>'\n            );\n\n            nav.innerHTML = items.join('');\n        }\n\n        function renderTips(rows){\n            const comparable = rows.filter(r =>\n                Number(r.price) > 0 && r.commodity && r.unit\n            );\n\n            const commodityGroups = {};\n\n            comparable.forEach(r => {\n                const key = (r.commodity + '|' + r.unit).toLowerCase();\n\n                if (!commodityGroups[key]) {\n                    commodityGroups[key] = [];\n                }\n\n                commodityGroups[key].push(Number(r.price));\n            });\n\n            const averages = {};\n\n            Object.keys(commodityGroups).forEach(key => {\n                const prices = commodityGroups[key];\n                averages[key] = prices.reduce((sum, value) => sum + value, 0) \/ prices.length;\n            });\n\n            const marketScores = {};\n\n            comparable.forEach(r => {\n                const key = (r.commodity + '|' + r.unit).toLowerCase();\n                const average = averages[key];\n\n                if (!average || commodityGroups[key].length < 2) {\n                    return;\n                }\n\n                const difference = ((Number(r.price) - average) \/ average) * 100;\n                const marketKey = r.country_code + '|' + r.market;\n\n                if (!marketScores[marketKey]) {\n                    marketScores[marketKey] = {\n                        market: r.market,\n                        country: r.country_name,\n                        flag: r.country_flag,\n                        diffs: []\n                    };\n                }\n\n                marketScores[marketKey].diffs.push(difference);\n            });\n\n            const tips = Object.values(marketScores)\n                .map(item => {\n                    item.score = item.diffs.reduce((sum, value) => sum + value, 0) \/ item.diffs.length;\n                    return item;\n                })\n                .filter(item => item.score < 0)\n                .sort((a,b) => a.score - b.score)\n                .slice(0, 5);\n\n            if (!tips.length) {\n                el('aaqTips').innerHTML =\n                    '<div class=\"aaq-alert\">The current provider response does not contain enough comparable observations to calculate cheapest-market tips.<\/div>';\n                return;\n            }\n\n            el('aaqTips').innerHTML = tips.map(tip =>\n                '<article class=\"aaq-tipcard\">' +\n                    '<h3>' + esc(tip.market) + '<\/h3>' +\n                    '<div class=\"place\">' + esc(tip.country) + '<\/div>' +\n                    '<strong>' + Math.abs(Math.round(tip.score)) + '% cheaper than the CEMAC average<\/strong>' +\n                '<\/article>'\n            ).join('');\n        }\n\n        root.addEventListener('click', event => {\n            const chip = event.target.closest('.aaq-chip');\n\n            if (chip) {\n                root.querySelectorAll('.aaq-chip').forEach(button => {\n                    button.classList.remove('is-active');\n                });\n\n                chip.classList.add('is-active');\n                state.selectedCountry = chip.dataset.country || 'all';\n                state.page = 1;\n                render();\n                return;\n            }\n\n            const page = event.target.closest('.aaq-pagebtn[data-page]');\n\n            if (page && !page.disabled) {\n                const nextPage = Number(page.dataset.page);\n\n                if (nextPage > 0) {\n                    state.page = nextPage;\n                    renderTable();\n\n                    tableSection.scrollIntoView({\n                        behavior: 'smooth',\n                        block: 'start'\n                    });\n                }\n            }\n        });\n\n        searchInput.addEventListener('input', () => {\n            state.search = searchInput.value;\n            state.page = 1;\n            renderTable();\n        });\n\n        categorySelect.addEventListener('change', () => {\n            state.category = categorySelect.value;\n            state.page = 1;\n            renderTable();\n        });\n\n        refreshBtn.addEventListener('click', () => loadAll(true));\n\n        loadAll(false);\n    })();\n    <\/script>\n\n    <\/div>\n\t\t\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":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"ocean_front_end_style_editor":"no","ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","footnotes":""},"class_list":["post-183","page","type-page","status-publish","hentry","entry","owp-thumbs-layout-horizontal","owp-btn-normal","owp-tabs-layout-horizontal","has-no-thumbnails","has-product-nav"],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/afriqagro.com\/fr\/wp-json\/wp\/v2\/pages\/183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/afriqagro.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/afriqagro.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/afriqagro.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/afriqagro.com\/fr\/wp-json\/wp\/v2\/comments?post=183"}],"version-history":[{"count":4,"href":"https:\/\/afriqagro.com\/fr\/wp-json\/wp\/v2\/pages\/183\/revisions"}],"predecessor-version":[{"id":188,"href":"https:\/\/afriqagro.com\/fr\/wp-json\/wp\/v2\/pages\/183\/revisions\/188"}],"wp:attachment":[{"href":"https:\/\/afriqagro.com\/fr\/wp-json\/wp\/v2\/media?parent=183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}