{"id":2565,"date":"2026-09-16T04:17:14","date_gmt":"2026-09-16T00:17:14","guid":{"rendered":"https:\/\/markunox.com\/?page_id=2565"},"modified":"2026-09-21T21:16:24","modified_gmt":"2026-09-21T17:16:24","slug":"brokers-2","status":"publish","type":"page","link":"https:\/\/markunox.com\/ar\/brokers-2\/","title":{"rendered":"\u0627\u0644\u0648\u0633\u0637\u0627\u0621"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2565\" class=\"elementor elementor-2565\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-17e2f9c e-con-full e-flex e-con e-parent\" data-id=\"17e2f9c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6627c0f elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"6627c0f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"mx-ranking-app\">\n\n    <!-- =====================================================\n         RANKING TABS\n    ====================================================== -->\n\n    <div class=\"mx-rank-tabs\">\n\n        <button type=\"button\" data-mode=\"overall\" class=\"active\">\n            \ud83c\udfc6 MARKUNOX Ranking\n        <\/button>\n\n        <button type=\"button\" data-mode=\"brand\">\n            \u2605 Brand Ranking\n        <\/button>\n\n        <button type=\"button\" data-mode=\"popular\">\n            \u2668 Popular Ranking\n        <\/button>\n\n        <button type=\"button\" data-mode=\"trading\">\n            \u25a5 Trading ENV\n        <\/button>\n\n        <button type=\"button\" data-mode=\"scam\">\n            \u2620 Scam Broker\n        <\/button>\n\n    <\/div>\n\n\n    <!-- =====================================================\n         TOOLBAR\n    ====================================================== -->\n\n    <div class=\"mx-rank-toolbar\">\n\n        <div class=\"mx-category-custom\">\n            <select id=\"mx-rank-category\" aria-hidden=\"true\" tabindex=\"-1\">\n                <option value=\"all\">All Categories<\/option>\n            <\/select>\n\n            <button\n                type=\"button\"\n                id=\"mx-category-button\"\n                class=\"mx-category-button\"\n                aria-haspopup=\"listbox\"\n                aria-expanded=\"false\"\n            >\n                <span id=\"mx-category-label\">All Categories<\/span>\n                <span class=\"mx-category-chevron\">\u2304<\/span>\n            <\/button>\n\n            <div\n                id=\"mx-category-menu\"\n                class=\"mx-category-menu\"\n                role=\"listbox\"\n            ><\/div>\n        <\/div>\n\n        <div id=\"mx-last-update\" class=\"mx-last-update\">\n            Last Update: LIVE\n        <\/div>\n\n        <button\n            type=\"button\"\n            id=\"mx-filter-toggle\"\n            class=\"mx-filter-button\"\n        >\n            \u26b2 Filter\n        <\/button>\n\n    <\/div>\n\n\n    <!-- =====================================================\n         PROFESSIONAL FILTER SIDEBAR\n    ====================================================== -->\n\n    <div class=\"mx-ranking-content\">\n\n        <aside id=\"mx-filter-panel\" class=\"mx-filter-panel mx-filter-sidebar\" aria-label=\"Broker filters\">\n\n            <div class=\"mx-filter-sidebar-head\">\n                <div>\n                    <strong>Filters<\/strong>\n                    <span>Find the broker that matches your needs<\/span>\n                <\/div>\n\n                <button\n                    type=\"button\"\n                    id=\"mx-filter-close\"\n                    class=\"mx-filter-close\"\n                    aria-label=\"Close filters\"\n                >\u00d7<\/button>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Broker Search<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <label class=\"mx-filter-field\">\n                        <span>Broker name<\/span>\n                        <input\n                            id=\"mx-filter-search\"\n                            type=\"text\"\n                            placeholder=\"Search broker...\"\n                            autocomplete=\"off\"\n                        >\n                    <\/label>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>MARKUNOX Score<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <label class=\"mx-filter-field\">\n                        <span>Minimum score<\/span>\n\n                        <div class=\"mx-custom-select\" data-select-id=\"mx-filter-score\">\n                            <select id=\"mx-filter-score\" class=\"mx-native-hidden-select\" aria-hidden=\"true\" tabindex=\"-1\">\n                                <option value=\"\">Any Score<\/option>\n                                <option value=\"5\">5.0+<\/option>\n                                <option value=\"6\">6.0+<\/option>\n                                <option value=\"7\">7.0+<\/option>\n                                <option value=\"8\">8.0+<\/option>\n                                <option value=\"9\">9.0+<\/option>\n                            <\/select>\n\n                            <button type=\"button\" class=\"mx-custom-select-button\" aria-haspopup=\"listbox\" aria-expanded=\"false\">\n                                <span class=\"mx-custom-select-label\">Any Score<\/span>\n                                <span class=\"mx-custom-select-chevron\">\u2304<\/span>\n                            <\/button>\n\n                            <div class=\"mx-custom-select-menu\" role=\"listbox\"><\/div>\n                        <\/div>\n                    <\/label>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Country<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <label class=\"mx-filter-field\">\n                        <span>Registered country<\/span>\n\n                        <div class=\"mx-custom-select\" data-select-id=\"mx-filter-country\">\n                            <select id=\"mx-filter-country\" class=\"mx-native-hidden-select\" aria-hidden=\"true\" tabindex=\"-1\">\n                                <option value=\"\">All Countries<\/option>\n                            <\/select>\n\n                            <button type=\"button\" class=\"mx-custom-select-button\" aria-haspopup=\"listbox\" aria-expanded=\"false\">\n                                <span class=\"mx-custom-select-label\">All Countries<\/span>\n                                <span class=\"mx-custom-select-chevron\">\u2304<\/span>\n                            <\/button>\n\n                            <div class=\"mx-custom-select-menu\" role=\"listbox\"><\/div>\n                        <\/div>\n                    <\/label>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Regulation & Licenses<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <label class=\"mx-filter-field\">\n                        <span>Minimum licenses<\/span>\n                        <select id=\"mx-filter-licenses\" class=\"mx-sidebar-select\">\n                            <option value=\"\">Any number<\/option>\n                            <option value=\"1\">1+<\/option>\n                            <option value=\"2\">2+<\/option>\n                            <option value=\"3\">3+<\/option>\n                            <option value=\"4\">4+<\/option>\n                            <option value=\"5\">5+<\/option>\n                        <\/select>\n                    <\/label>\n\n                    <label class=\"mx-check\">\n                        <input id=\"mx-filter-verified\" type=\"checkbox\">\n                        <span class=\"mx-check-box\" aria-hidden=\"true\"><\/span>\n                        <span class=\"mx-check-label\">Verified brokers only<\/span>\n                    <\/label>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Trading Platform<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <label class=\"mx-check\">\n                        <input id=\"mx-filter-mt4\" type=\"checkbox\">\n                        <span class=\"mx-check-box\" aria-hidden=\"true\"><\/span>\n                        <span class=\"mx-check-label\">MetaTrader 4<\/span>\n                    <\/label>\n\n                    <label class=\"mx-check\">\n                        <input id=\"mx-filter-mt5\" type=\"checkbox\">\n                        <span class=\"mx-check-box\" aria-hidden=\"true\"><\/span>\n                        <span class=\"mx-check-label\">MetaTrader 5<\/span>\n                    <\/label>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Account Features<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <label class=\"mx-check\">\n                        <input id=\"mx-filter-islamic\" type=\"checkbox\">\n                        <span class=\"mx-check-box\" aria-hidden=\"true\"><\/span>\n                        <span class=\"mx-check-label\">Islamic account<\/span>\n                    <\/label>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Trading Environment<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <label class=\"mx-filter-field\">\n                        <span>Minimum grade<\/span>\n                        <select id=\"mx-filter-trading-grade\" class=\"mx-sidebar-select\">\n                            <option value=\"\">Any grade<\/option>\n                            <option value=\"AAA\">AAA<\/option>\n                            <option value=\"AA\">AA<\/option>\n                            <option value=\"A\">A<\/option>\n                            <option value=\"B\">B or better<\/option>\n                            <option value=\"C\">C or better<\/option>\n                        <\/select>\n                    <\/label>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Popularity<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <label class=\"mx-filter-field\">\n                        <span>Minimum popularity<\/span>\n                        <select id=\"mx-filter-popularity\" class=\"mx-sidebar-select\">\n                            <option value=\"\">Any popularity<\/option>\n                            <option value=\"5\">5.0+<\/option>\n                            <option value=\"6\">6.0+<\/option>\n                            <option value=\"7\">7.0+<\/option>\n                            <option value=\"8\">8.0+<\/option>\n                            <option value=\"9\">9.0+<\/option>\n                        <\/select>\n                    <\/label>\n                <\/div>\n            <\/div>\n\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Funding Methods<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <div class=\"mx-static-filter-list\" data-filter-group=\"funding\">\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"bank\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Bank Transfer<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"card\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Credit \/ Debit Card<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"crypto\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Crypto \/ USDT<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"paypal\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">PayPal<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"skrill\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Skrill<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"neteller\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Neteller<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"perfect money\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Perfect Money<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"webmoney\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">WebMoney<\/span><\/label>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Minimum Deposit<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <div class=\"mx-static-filter-list\" data-filter-group=\"deposit\">\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-min-deposit\" value=\"\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Any amount<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-min-deposit\" value=\"20\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Up to $20<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-min-deposit\" value=\"50\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Up to $50<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-min-deposit\" value=\"100\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Up to $100<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-min-deposit\" value=\"200\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Up to $200<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-min-deposit\" value=\"500\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Up to $500<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-min-deposit\" value=\"1000\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Up to $1,000<\/span><\/label>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Execution Management<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <div class=\"mx-static-filter-list\" data-filter-group=\"execution-management\">\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"instant execution\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Instant Execution<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"market execution\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Market Execution<\/span><\/label>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Spread Model<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <div class=\"mx-static-filter-list\" data-filter-group=\"spread\">\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"fixed\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Fixed Spread<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"floating\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Floating Spread<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"raw\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">RAW Spread<\/span><\/label>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Order Execution Type<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <div class=\"mx-static-filter-list\" data-filter-group=\"execution-type\">\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"stp\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">STP<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"ecn\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">ECN<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"ndd\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">NDD<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"ecn\/stp\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">ECN \/ STP<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"dma\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">DMA<\/span><\/label>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Trading Platforms<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <input class=\"mx-list-search mx-static-search\" type=\"text\" placeholder=\"Search platform...\" data-target=\"platforms\">\n                    <div class=\"mx-static-filter-list mx-platform-list\" data-filter-group=\"platforms\">\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"mt5\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">MT5<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"mt4\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">MT4<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"ctrader\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">cTrader<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"ninjatrader\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">NinjaTrader<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"webtrader\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">WebTrader<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"nettradex\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">NetTradeX<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"iress\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">IRESS<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"tradingview\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">TradingView<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"protrader\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">ProTrader<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"mobile\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Mobile Trader<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"proprietary\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Dedicated \/ Proprietary Platform<\/span><\/label>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Years in Business<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <div class=\"mx-static-filter-list\" data-filter-group=\"years\">\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-years\" value=\"\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">Any history<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-years\" value=\"3\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">3+ years<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-years\" value=\"5\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">5+ years<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-years\" value=\"10\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">10+ years<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-years\" value=\"15\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">15+ years<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"radio\" name=\"mx-years\" value=\"20\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">20+ years<\/span><\/label>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Primary Regulators<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <input class=\"mx-list-search mx-static-search\" type=\"text\" placeholder=\"Search regulator...\" data-target=\"primary-regulators\">\n                    <div class=\"mx-static-filter-list\" data-filter-group=\"primary-regulators\">\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"fca\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">FCA<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"asic\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">ASIC<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"cysec\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">CySEC<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"nfa\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">NFA<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"cftc\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">CFTC<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"jFSA\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">JFSA<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"mas\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">MAS<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"finma\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">FINMA<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"dfsa\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">DFSA<\/span><\/label>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-card open\">\n                <button type=\"button\" class=\"mx-filter-card-head\" aria-expanded=\"true\">\n                    <span>Offshore Regulators<\/span>\n                    <span class=\"mx-filter-chevron\">\u2303<\/span>\n                <\/button>\n                <div class=\"mx-filter-card-body\">\n                    <input class=\"mx-list-search mx-static-search\" type=\"text\" placeholder=\"Search regulator...\" data-target=\"offshore-regulators\">\n                    <div class=\"mx-static-filter-list\" data-filter-group=\"offshore-regulators\">\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"fsa\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">FSA<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"fsc\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">FSC<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"ifsc\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">IFSC<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"vfsc\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">VFSC<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"fsca\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">FSCA<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"fsc bvi\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">BVI FSC<\/span><\/label>\n                        <label class=\"mx-check\"><input type=\"checkbox\" value=\"cima\"><span class=\"mx-check-box\"><\/span><span class=\"mx-check-label\">CIMA<\/span><\/label>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"mx-filter-actions\">\n                <button type=\"button\" id=\"mx-filter-reset\">Reset<\/button>\n            <\/div>\n\n        <\/aside>\n\n        <div class=\"mx-ranking-main\">\n\n    <!-- =====================================================\n         COLUMN HEADER\n    ====================================================== -->\n\n    <div class=\"mx-ranking-header\">\n\n        <div>RANK<\/div>\n\n        <div>Broker<\/div>\n\n        <div>Verified<\/div>\n\n        <div>Score<\/div>\n\n        <div>Regulation<\/div>\n\n        <div>Trading ENV<\/div>\n\n        <div>Popularity<\/div>\n\n        <div>Action<\/div>\n\n    <\/div>\n\n\n    <!-- =====================================================\n         DYNAMIC ROWS\n    ====================================================== -->\n\n    <div id=\"mx-ranking-rows\">\n\n        <div class=\"mx-ranking-state\">\n            Loading MARKUNOX Ranking...\n        <\/div>\n\n    <\/div>\n\n        <\/div>\n    <\/div>\n\n<\/div>\n\n\n<script>\n(function () {\n\n    \"use strict\";\n\n\n    \/* =====================================================\n       CONFIG\n    ====================================================== *\/\n\n    const API =\n        \"https:\/\/api.markunox.com\/ranking.php\";\n\n\n    const CLIENT_CACHE_TTL = 5 * 60 * 1000;\n\n    const PERSISTENT_CACHE_TTL = 24 * 60 * 60 * 1000;\n\n    const PERSISTENT_CACHE_PREFIX =\n        \"markunox_ranking_v16_\";\n\n    const responseCache = new Map();\n\n    \/*\n     * Broker-specific profile cache.\n     * This makes repeat visits nearly instant because the expensive\n     * ?q=slug responses are reused for 24 hours.\n     *\/\n    const BROKER_DETAIL_CACHE_TTL = 24 * 60 * 60 * 1000;\n    const BROKER_DETAIL_CACHE_PREFIX = \"markunox_broker_detail_v16_\";\n\n    let requestSequence = 0;\n\n\n    const app =\n        document.getElementById(\n            \"mx-ranking-app\"\n        );\n\n\n    if (!app) {\n        return;\n    }\n\n\n    const rows =\n        document.getElementById(\n            \"mx-ranking-rows\"\n        );\n\n\n    const categorySelect =\n        document.getElementById(\n            \"mx-rank-category\"\n        );\n\n\n    const categoryButton =\n        document.getElementById(\n            \"mx-category-button\"\n        );\n\n\n    const categoryLabel =\n        document.getElementById(\n            \"mx-category-label\"\n        );\n\n\n    const categoryMenu =\n        document.getElementById(\n            \"mx-category-menu\"\n        );\n\n\n    const countrySelect =\n        document.getElementById(\n            \"mx-filter-country\"\n        );\n\n\n    const searchInput =\n        document.getElementById(\n            \"mx-filter-search\"\n        );\n\n\n    const scoreSelect =\n        document.getElementById(\n            \"mx-filter-score\"\n        );\n\n\n    const verifiedInput =\n        document.getElementById(\n            \"mx-filter-verified\"\n        );\n\n\n    const islamicInput =\n        document.getElementById(\n            \"mx-filter-islamic\"\n        );\n\n\n    const filterPanel =\n        document.getElementById(\n            \"mx-filter-panel\"\n        );\n\n\n    const filterToggle =\n        document.getElementById(\n            \"mx-filter-toggle\"\n        );\n\n\n    const lastUpdate =\n        document.getElementById(\n            \"mx-last-update\"\n        );\n\n\n    const licensesSelect = document.getElementById(\"mx-filter-licenses\");\n    const tradingGradeSelect = document.getElementById(\"mx-filter-trading-grade\");\n    const popularitySelect = document.getElementById(\"mx-filter-popularity\");\n    const mt4Input = document.getElementById(\"mx-filter-mt4\");\n    const mt5Input = document.getElementById(\"mx-filter-mt5\");\n    const filterClose = document.getElementById(\"mx-filter-close\");\n\n\n    let controller = null;\n\n\n    const state = {\n\n        mode: \"overall\",\n\n        category: \"all\",\n\n        country: \"\",\n\n        q: \"\",\n\n        verified: false,\n\n        islamic: false,\n\n        minScore: \"\",\n\n        minLicenses: \"\",\n\n        tradingGrade: \"\",\n\n        minPopularity: \"\",\n\n        mt4: false,\n\n        mt5: false,\n\n        fundingMethods: [],\n\n        maxMinimumDeposit: \"\",\n\n        executionManagement: [],\n\n        spreadModels: [],\n\n        executionTypes: [],\n\n        platforms: [],\n\n        minYears: \"\",\n\n        primaryRegulators: [],\n\n        offshoreRegulators: []\n\n    };\n\n\n    \/* =====================================================\n       SAFE HTML\n    ====================================================== *\/\n\n    function escapeHtml(value) {\n\n        const div =\n            document.createElement(\"div\");\n\n\n        div.textContent =\n            value === null ||\n            value === undefined\n                ? \"\"\n                : String(value);\n\n\n        return div.innerHTML;\n    }\n\n\n    \/* =====================================================\n       NUMBER\n    ====================================================== *\/\n\n    function getNumber(value) {\n\n        if (\n            value === null ||\n            value === undefined ||\n            value === \"\"\n        ) {\n            return null;\n        }\n\n\n        const number =\n            Number(value);\n\n\n        return Number.isFinite(number)\n            ? number\n            : null;\n    }\n\n\n    function formatScore(value) {\n\n        const number =\n            getNumber(value);\n\n\n        return number === null\n            ? \"\u2014\"\n            : number.toFixed(2);\n    }\n\n\n    \/* =====================================================\n       STARS\n    ====================================================== *\/\n\n    function renderStars(value) {\n\n        const number =\n            getNumber(value);\n\n\n        if (number === null) {\n            return \"\";\n        }\n\n\n        const filled =\n            Math.max(\n                0,\n                Math.min(\n                    5,\n                    Math.round(\n                        number \/ 2\n                    )\n                )\n            );\n\n\n        return (\n            \"\u2605\".repeat(filled) +\n            \"\u2606\".repeat(\n                5 - filled\n            )\n        );\n    }\n\n\n    \/* =====================================================\n       RANK COLORS\n    ====================================================== *\/\n\n    function rankClass(rank) {\n\n        if (rank === 1) {\n            return \"gold\";\n        }\n\n\n        if (rank === 2) {\n            return \"silver\";\n        }\n\n\n        if (rank === 3) {\n            return \"bronze\";\n        }\n\n\n        return \"\";\n    }\n\n\n    \/* =====================================================\n       TRADING LABEL\n    ====================================================== *\/\n\n    function tradingLabel(value) {\n\n        const number =\n            getNumber(value);\n\n\n        if (number === null) {\n            return \"N\/A\";\n        }\n\n\n        if (number >= 8) {\n            return \"Excellent\";\n        }\n\n\n        if (number >= 6.5) {\n            return \"Good\";\n        }\n\n\n        if (number >= 5) {\n            return \"Average\";\n        }\n\n\n        return \"Weak\";\n    }\n\n\n    \/* =====================================================\n       POPULARITY LABEL\n    ====================================================== *\/\n\n    function popularityLabel(value) {\n\n        const number =\n            getNumber(value);\n\n\n        if (number === null) {\n            return \"N\/A\";\n        }\n\n\n        if (number >= 8) {\n            return \"Very High\";\n        }\n\n\n        if (number >= 6) {\n            return \"High\";\n        }\n\n\n        if (number >= 4) {\n            return \"Medium\";\n        }\n\n\n        return \"Low\";\n    }\n\n\n    \/* =====================================================\n       METRIC BAR\n    ====================================================== *\/\n\n    function renderMeter(\n        value,\n        type\n    ) {\n\n        const number =\n            getNumber(value);\n\n\n        if (number === null) {\n\n            return `\n                <div class=\"mx-meter ${type}\">\n                    <span style=\"width:0%\"><\/span>\n                <\/div>\n            `;\n        }\n\n\n        const width =\n            Math.max(\n                0,\n                Math.min(\n                    100,\n                    number * 10\n                )\n            );\n\n\n        return `\n            <div class=\"mx-meter ${type}\">\n                <span style=\"width:${width}%\"><\/span>\n            <\/div>\n        `;\n    }\n\n\n    \/* =====================================================\n       SOURCE-NATIVE METRICS\n    ====================================================== *\/\n\n    function getSourceNative(broker) {\n\n        const native =\n            broker &&\n            broker.source_native &&\n            typeof broker.source_native === \"object\"\n                ? broker.source_native\n                : {};\n\n        const legacy =\n            broker &&\n            broker.source_metrics &&\n            typeof broker.source_metrics === \"object\"\n                ? broker.source_metrics\n                : {};\n\n        function firstNumber(values) {\n\n            for (const value of values) {\n\n                const number =\n                    getNumber(value);\n\n                if (number !== null) {\n                    return number;\n                }\n            }\n\n            return null;\n        }\n\n        function firstText(values) {\n\n            for (const value of values) {\n\n                const clean =\n                    String(\n                        value === null ||\n                        value === undefined\n                            ? \"\"\n                            : value\n                    )\n                        .trim()\n                        .toUpperCase();\n\n                if (clean) {\n                    return clean;\n                }\n            }\n\n            return \"\";\n        }\n\n        const ratingIndex =\n            firstNumber([\n                native.rating_index,\n                native.wikifx_score,\n                native.wikifx_rating_score,\n                broker.wikifx_score,\n                broker.wikifx_rating_score,\n                broker.rating_index,\n                legacy.rating_index,\n                legacy.wikifx_score,\n                legacy.wikifx_rating_score,\n                broker.display_score,\n                broker.score,\n                broker.markunox_score\n            ]);\n\n        const influenceIndex =\n            firstNumber([\n                native.influence_index,\n                native.wikifx_influence_index,\n                broker.wikifx_influence_index,\n                broker.influence_index,\n                broker.popularity_score,\n                legacy.influence_index,\n                legacy.wikifx_influence_index\n            ]);\n\n        let licenseCount =\n            firstNumber([\n                native.license_count,\n                native.wikifx_license_count,\n                broker.wikifx_license_count,\n                broker.license_count,\n                legacy.license_count,\n                legacy.wikifx_license_count\n            ]);\n\n        if (\n            licenseCount === null &&\n            Array.isArray(native.license_details)\n        ) {\n            licenseCount = native.license_details.length;\n        }\n\n        if (\n            licenseCount === null &&\n            Array.isArray(broker.licenses)\n        ) {\n            licenseCount = broker.licenses.length;\n        }\n\n        if (licenseCount === null) {\n\n            const regulatorList =\n                String(\n                    broker &&\n                    broker.regulators\n                        ? broker.regulators\n                        : \"\"\n                )\n                    .split(\"\/\")\n                    .map(function (item) {\n                        return item.trim();\n                    })\n                    .filter(Boolean);\n\n            if (regulatorList.length) {\n                licenseCount =\n                    regulatorList.length;\n            }\n        }\n\n        const tradingGrade =\n            firstText([\n                native.trading_environment_grade,\n                native.trading_grade,\n                native.wikifx_trading_grade,\n                broker.wikifx_trading_grade,\n                broker.trading_environment_grade,\n                broker.trading_grade,\n                legacy.trading_environment_grade,\n                legacy.trading_grade,\n                legacy.wikifx_trading_grade\n            ]);\n\n        const influenceGrade =\n            firstText([\n                native.influence_grade,\n                native.wikifx_influence_grade,\n                broker.wikifx_influence_grade,\n                broker.influence_grade,\n                legacy.influence_grade,\n                legacy.wikifx_influence_grade\n            ]);\n\n        return {\n            ratingIndex,\n            influenceIndex,\n            licenseCount,\n            tradingGrade,\n            influenceGrade\n        };\n    }\n\n\n    function getNativeDetails(broker) {\n\n        const native =\n            broker &&\n            broker.source_native &&\n            typeof broker.source_native === \"object\"\n                ? broker.source_native\n                : {};\n\n\n        const source =\n            getSourceNative(broker);\n\n\n        return {\n            ...source,\n\n            companyName:\n                String(native.company_name || \"\").trim(),\n\n            registeredRegion:\n                String(native.registered_region || \"\").trim(),\n\n            establishedYear:\n                String(native.established_year || \"\").trim(),\n\n            operatingPeriod:\n                String(native.operating_period || \"\").trim(),\n\n            companyWebsite:\n                String(native.company_website || \"\").trim(),\n\n            contactEmail:\n                String(native.contact_email || \"\").trim(),\n\n            contactPhone:\n                String(native.contact_phone || \"\").trim(),\n\n            companyAddress:\n                String(native.company_address || \"\").trim(),\n\n            minimumDeposit:\n                String(native.minimum_deposit || \"\").trim(),\n\n            maximumLeverage:\n                String(native.maximum_leverage || \"\").trim(),\n\n            accountNames:\n                Array.isArray(native.account_names)\n                    ? native.account_names.filter(Boolean)\n                    : [],\n\n            tradingPlatforms:\n                Array.isArray(native.trading_platforms)\n                    ? native.trading_platforms.filter(Boolean)\n                    : [],\n\n            fundingMethods:\n                Array.isArray(native.funding_methods)\n                    ? native.funding_methods.filter(Boolean)\n                    : [],\n\n            regulatorCountries:\n                Array.isArray(native.regulator_countries)\n                    ? native.regulator_countries.filter(Boolean)\n                    : [],\n\n            executionSpeed:\n                getNumber(native.execution_speed_ms),\n\n            mt4Servers:\n                getNumber(native.mt4_servers),\n\n            mt5Servers:\n                getNumber(native.mt5_servers),\n\n            signals:\n                Array.isArray(native.signals)\n                    ? native.signals.filter(Boolean)\n                    : [],\n\n            sourceUrl:\n                String(native.source_url || \"\").trim(),\n\n            observedAt:\n                String(native.observed_at || \"\").trim()\n        };\n    }\n\n\n    function detailValue(value) {\n\n        const cleaned =\n            String(value || \"\").trim();\n\n        return cleaned !== \"\"\n            ? escapeHtml(cleaned)\n            : \"N\/A\";\n    }\n\n\n    function detailList(items) {\n\n        if (!Array.isArray(items) || !items.length) {\n            return \"N\/A\";\n        }\n\n        return items\n            .map(function (item) {\n                return escapeHtml(String(item));\n            })\n            .join(\", \");\n    }\n\n\n    function formatLicenseCount(value) {\n\n        const number =\n            getNumber(value);\n\n\n        if (number === null) {\n            return \"\u2014\";\n        }\n\n\n        const count =\n            Math.max(0, Math.round(number));\n\n\n        return `${count} LIC`;\n    }\n\n\n    function sourceGradeLabel(grade) {\n\n        const value =\n            String(grade || \"\")\n                .trim()\n                .toUpperCase();\n\n\n        return value\n            ? `Grade ${escapeHtml(value)}`\n            : \"N\/A\";\n    }\n\n\n    \/* =====================================================\n       BROKER FEATURES\n    ====================================================== *\/\n\n    function brokerFeatures(broker) {\n\n        const raw = [];\n\n\n        if (\n            broker.has_islamic_account\n        ) {\n\n            raw.push(\n                \"Islamic\"\n            );\n        }\n\n\n        if (broker.broker_type) {\n\n            raw.push(\n                String(\n                    broker.broker_type\n                )\n            );\n        }\n\n\n        if (broker.instruments) {\n\n            String(\n                broker.instruments\n            )\n                .split(\",\")\n                .forEach(function (item) {\n\n                    const clean =\n                        item.trim();\n\n\n                    if (clean) {\n\n                        raw.push(\n                            clean\n                                .charAt(0)\n                                .toUpperCase() +\n                            clean.slice(1)\n                        );\n                    }\n\n                });\n        }\n\n\n        \/*\n         * REMOVE DUPLICATES\n         *\/\n\n        const seen =\n            new Set();\n\n\n        const unique =\n            raw.filter(function (item) {\n\n                const key =\n                    item.toLowerCase();\n\n\n                if (seen.has(key)) {\n                    return false;\n                }\n\n\n                seen.add(key);\n\n                return true;\n            });\n\n\n        return unique\n            .slice(0, 3)\n            .map(function (item) {\n\n                return `\n                    <span>\n                        ${escapeHtml(item)}\n                    <\/span>\n                `;\n\n            })\n            .join(\"\");\n    }\n\n    \/* =====================================================\n       REGULATORS\n       Exactly 4 visible slots. Real names only; missing data\n       stays as an empty placeholder until the importer fills it.\n    ====================================================== *\/\n\n    function renderRegulators(value) {\n\n        const regulators = value\n            ? String(value)\n                .split(\/\\s*\\\/\\s*\/)\n                .map(function (item) {\n                    return item.trim();\n                })\n                .filter(Boolean)\n                .slice(0, 4)\n            : [];\n\n        while (regulators.length < 4) {\n            regulators.push(\"\");\n        }\n\n        return regulators\n            .map(function (item) {\n\n                if (!item) {\n                    return `\n                        <span class=\"mx-regulator-chip mx-regulator-placeholder\">\n                            \u2014\n                        <\/span>\n                    `;\n                }\n\n                return `\n                    <span class=\"mx-regulator-chip\">\n                        ${escapeHtml(item)}\n                    <\/span>\n                `;\n\n            })\n            .join(\"\");\n    }\n\n\n    \/* =====================================================\n       CUSTOM CATEGORY MENU\n    ====================================================== *\/\n\n    function categoryText(value) {\n\n        if (!value || value === \"all\") {\n            return \"All Categories\";\n        }\n\n        return String(value)\n            .charAt(0)\n            .toUpperCase() +\n            String(value)\n                .slice(1);\n    }\n\n\n    function refreshCategoryMenu() {\n\n        if (\n            !categoryMenu ||\n            !categoryButton ||\n            !categoryLabel\n        ) {\n            return;\n        }\n\n        const options =\n            Array.from(\n                categorySelect.options\n            );\n\n        categoryMenu.innerHTML =\n            options\n                .map(function (option) {\n\n                    const selected =\n                        option.value ===\n                        categorySelect.value;\n\n                    return `\n                        <button\n                            type=\"button\"\n                            class=\"mx-category-option${selected ? \" active\" : \"\"}\"\n                            data-value=\"${escapeHtml(option.value)}\"\n                            role=\"option\"\n                            aria-selected=\"${selected ? \"true\" : \"false\"}\"\n                        >\n                            ${escapeHtml(option.textContent || categoryText(option.value))}\n                        <\/button>\n                    `;\n                })\n                .join(\"\");\n\n        categoryLabel.textContent =\n            categoryText(\n                categorySelect.value\n            );\n    }\n\n\n    function closeCategoryMenu() {\n\n        if (\n            !categoryMenu ||\n            !categoryButton\n        ) {\n            return;\n        }\n\n        categoryMenu.classList.remove(\n            \"open\"\n        );\n\n        categoryButton.setAttribute(\n            \"aria-expanded\",\n            \"false\"\n        );\n    }\n\n\n    \/* =====================================================\n       META\n    ====================================================== *\/\n\n    function populateMeta(meta) {\n\n        if (!meta) {\n            return;\n        }\n\n\n        \/*\n         * CATEGORY\n         *\/\n\n        if (\n            Array.isArray(\n                meta.categories\n            )\n        ) {\n\n            const current =\n                categorySelect.value;\n\n\n            categorySelect.innerHTML =\n                `\n                <option value=\"all\">\n                    All Categories\n                <\/option>\n                ` +\n\n                meta.categories\n                    .map(function (category) {\n\n                        const value =\n                            escapeHtml(\n                                category\n                            );\n\n\n                        const text =\n                            String(category)\n                                .charAt(0)\n                                .toUpperCase() +\n\n                            String(category)\n                                .slice(1);\n\n\n                        return `\n                            <option value=\"${value}\">\n                                ${escapeHtml(text)}\n                            <\/option>\n                        `;\n\n                    })\n                    .join(\"\");\n\n\n            categorySelect.value =\n                current || \"all\";\n        }\n\n\n        \/*\n         * COUNTRY\n         *\/\n\n        if (\n            Array.isArray(\n                meta.countries\n            )\n        ) {\n\n            const current =\n                countrySelect.value;\n\n\n            countrySelect.innerHTML =\n                `\n                <option value=\"\">\n                    All Countries\n                <\/option>\n                ` +\n\n                meta.countries\n                    .map(function (country) {\n\n                        const value =\n                            escapeHtml(\n                                country\n                            );\n\n\n                        return `\n                            <option value=\"${value}\">\n                                ${value}\n                            <\/option>\n                        `;\n\n                    })\n                    .join(\"\");\n\n\n            countrySelect.value =\n                current || \"\";\n        }\n\n\n        refreshCategoryMenu();\n\n        if (\n            typeof customSelectControllers !== \"undefined\"\n        ) {\n            customSelectControllers\n                .forEach(function (instance) {\n                    instance.refresh();\n                });\n        }\n\n    }\n\n\n   \/* =====================================================\n   BROKER LOGO + NAME + VERIFIED\n===================================================== *\/\n\nfunction renderBrokerIdentity(\n    broker,\n    brokerName\n) {\n\n    const rawName = String(\n        broker && broker.name\n            ? broker.name\n            : brokerName || \"\"\n    ).trim();\n\n    const rawSlug = String(\n        broker && broker.slug\n            ? broker.slug\n            : \"\"\n    ).trim().toLowerCase();\n\n    const nameKey = rawName.toLowerCase();\n\n    let logoUrl = String(\n        broker && broker.logo_url\n            ? broker.logo_url\n            : \"\"\n    ).trim();\n\n    let logoClass = \"\";\n\n    \/* Only these two brokers are overridden. *\/\n    if (\n        rawSlug === \"easymarkets\" ||\n        rawSlug === \"easy-markets\" ||\n        nameKey === \"easymarkets\" ||\n        nameKey === \"easy markets\"\n    ) {\n        logoUrl =\n            \"https:\/\/www.google.com\/s2\/favicons?sz=256&domain_url=https:\/\/www.easy-markets.com\/\";\n        logoClass = \" mx-logo-easymarkets\";\n    }\n\n    if (\n        rawSlug === \"tiger-brokers\" ||\n        rawSlug === \"tigerbrokers\" ||\n        rawSlug === \"tiger\" ||\n        nameKey === \"tiger brokers\" ||\n        nameKey === \"tiger broker\"\n    ) {\n        logoUrl =\n            \"https:\/\/www.google.com\/s2\/favicons?sz=256&domain_url=https:\/\/www.itiger.com\/sg\/\";\n        logoClass = \" mx-logo-tiger\";\n    }\n\n    return `\n        <div class=\"mx-broker-layout\">\n\n            <div class=\"mx-broker-logo-wrap\">\n\n                ${\n                    logoUrl\n                        ? `\n                            <img\n                                class=\"mx-broker-logo${logoClass}\"\n                                src=\"${escapeHtml(logoUrl)}\"\n                                alt=\"${brokerName}\"\n                                loading=\"lazy\"\n                                decoding=\"async\"\n                            >\n                          `\n                        : `\n                            <div class=\"mx-broker-logo-placeholder\">\n                                ${brokerName.charAt(0)}\n                            <\/div>\n                          `\n                }\n\n            <\/div>\n\n\n            <div class=\"mx-broker-content\">\n\n                <div class=\"mx-broker-title-row\">\n\n                    <strong class=\"mx-broker-name\">\n                        ${brokerName}\n                    <\/strong>\n                <\/div>\n\n\n                <div class=\"mx-broker-features\">\n\n                    ${brokerFeatures(broker)}\n\n                <\/div>\n\n            <\/div>\n\n        <\/div>\n    `;\n}\n\nfunction renderBrokerVerification(broker) {\n\n    const native =\n        broker &&\n        broker.source_native &&\n        typeof broker.source_native === \"object\"\n            ? broker.source_native\n            : {};\n\n    const verificationStatus = String(\n        broker.verification_status ||\n        broker.review_status ||\n        native.verification_status ||\n        \"\"\n    ).trim().toLowerCase();\n\n    const riskText = String(\n        broker.risk_level ||\n        broker.risk_status ||\n        broker.risk_rating ||\n        native.risk_level ||\n        native.risk_status ||\n        native.risk_rating ||\n        \"\"\n    ).trim().toLowerCase();\n\n    const safetyScore = getNumber(\n        broker.safety_score ??\n        native.safety_score\n    );\n\n    const regulationScore = getNumber(\n        broker.regulation_score ??\n        native.regulation_score\n    );\n\n    const sourceNative = getSourceNative(broker);\n\n    const regulatorText = String(\n        broker.regulators ||\n        native.regulators ||\n        \"\"\n    ).trim();\n\n    const licenseCount =\n        sourceNative &&\n        sourceNative.licenseCount !== null\n            ? Number(sourceNative.licenseCount)\n            : null;\n\n    const explicitRejected =\n        verificationStatus === \"rejected\" ||\n        verificationStatus === \"blocked\" ||\n        broker.rejected === true;\n\n    const explicitHighRisk =\n        broker.high_risk === true ||\n        broker.is_high_risk === true ||\n        broker.scam === true ||\n        broker.is_scam === true ||\n        riskText.includes(\"high\") ||\n        riskText.includes(\"critical\") ||\n        riskText.includes(\"scam\") ||\n        riskText.includes(\"warning\");\n\n    const scoreHighRisk =\n        safetyScore !== null &&\n        safetyScore < 4;\n\n    const explicitlyUnregulated =\n        broker.unregulated === true ||\n        broker.is_unregulated === true ||\n        verificationStatus === \"unregulated\" ||\n        riskText.includes(\"unregulated\") ||\n        (\n            licenseCount === 0 &&\n            regulatorText === \"\" &&\n            verificationStatus !== \"verified\"\n        ) ||\n        regulationScore === 0;\n\n    \/*\n     * Priority:\n     * 1. REJECTED\n     * 2. HIGH RISK\n     * 3. UNREGULATED\n     * 4. VERIFIED\n     * 5. PENDING\n     *\/\n\n    if (explicitRejected) {\n        return `\n            <span\n                class=\"mx-broker-verified is-rejected\"\n                title=\"Broker verification rejected\"\n            >\n                REJECTED\n            <\/span>\n        `;\n    }\n\n    if (explicitHighRisk || scoreHighRisk) {\n        return `\n            <span\n                class=\"mx-broker-verified is-high-risk\"\n                title=\"High-risk status detected\"\n            >\n                HIGH RISK\n            <\/span>\n        `;\n    }\n\n    if (explicitlyUnregulated) {\n        return `\n            <span\n                class=\"mx-broker-verified is-unregulated\"\n                title=\"No active regulation detected\"\n            >\n                UNREGULATED\n            <\/span>\n        `;\n    }\n\n    if (\n        verificationStatus === \"verified\" ||\n        broker.verified === true ||\n        broker.is_verified === true\n    ) {\n        return `\n            <span\n                class=\"mx-broker-verified is-verified\"\n                title=\"Broker data verified\"\n            >\n                VERIFIED\n            <\/span>\n        `;\n    }\n\n    return `\n        <span\n            class=\"mx-broker-verified is-unverified\"\n            title=\"Verification pending\"\n        >\n            PENDING\n        <\/span>\n    `;\n}\n\n\n    \/* =====================================================\n       RENDER ROWS\n    ====================================================== *\/\n\n    function render(data) {\n\n        if (\n            !Array.isArray(data) ||\n            !data.length\n        ) {\n\n            rows.innerHTML = `\n                <div class=\"mx-ranking-state\">\n                    ${\n                        state.mode === \"scam\"\n                            ? \"No verified scam broker records are available.\"\n                            : \"No brokers match the selected filters.\"\n                    }\n                <\/div>\n            `;\n\n            return;\n        }\n\n\n        function brokerDataQuality(broker) {\n\n            const sourceNative =\n                getSourceNative(broker);\n\n            const rawScore =\n                broker.display_score !== undefined\n                    ? broker.display_score\n                    : broker.score;\n\n            const score =\n                getNumber(rawScore) !== null\n                    ? getNumber(rawScore)\n                    : sourceNative.ratingIndex;\n\n            const licenseCount =\n                getNumber(\n                    sourceNative.licenseCount\n                );\n\n            const influence =\n                getNumber(\n                    sourceNative.influenceIndex\n                );\n\n            const tradingGrade =\n                String(\n                    sourceNative.tradingGrade || \"\"\n                ).trim();\n\n            let available = 0;\n\n            if (score !== null) {\n                available++;\n            }\n\n            if (\n                licenseCount !== null &&\n                licenseCount > 0\n            ) {\n                available++;\n            }\n\n            if (tradingGrade !== \"\") {\n                available++;\n            }\n\n            if (influence !== null) {\n                available++;\n            }\n\n            return {\n                available: available,\n                ready: available >= 2,\n                score: score,\n                licenseCount: licenseCount,\n                tradingGrade: tradingGrade,\n                influence: influence\n            };\n        }\n\n\n        \/* Keep the exact server\/API ranking order. *\/\n        const sortedData = [...data];\n\n\n        let visibleCount = sortedData.length;\n\n\n        function drawRows() {\n\n            const visible =\n                sortedData.slice(\n                    0,\n                    visibleCount\n                );\n\n\n            rows.innerHTML =\n                visible.map(function (broker) {\n\n                    const rank =\n                        Number(\n                            broker.rank || 0\n                        );\n\n                    const brokerName =\n                        escapeHtml(\n                            broker.name ||\n                            \"Unknown Broker\"\n                        );\n\n                    const slug =\n                        encodeURIComponent(\n                            broker.slug || \"\"\n                        );\n\n                    const sourceNative =\n                        getSourceNative(broker);\n\n                    const quality =\n                        brokerDataQuality(broker);\n\n                    const hasData =\n                        quality.ready;\n\n                    const displayScoreNumber =\n                        getNumber(broker.display_score);\n\n                    const apiScoreNumber =\n                        getNumber(broker.score);\n\n                    const storedScoreNumber =\n                        getNumber(broker.markunox_score);\n\n                    const nativeScoreNumber =\n                        getNumber(sourceNative.ratingIndex);\n\n                    const effectiveScore =\n                        displayScoreNumber !== null\n                            ? displayScoreNumber\n                            : apiScoreNumber !== null\n                                ? apiScoreNumber\n                                : storedScoreNumber !== null\n                                    ? storedScoreNumber\n                                    : nativeScoreNumber;\n\n                    const scoreSource =\n                        displayScoreNumber !== null ||\n                        apiScoreNumber !== null ||\n                        storedScoreNumber !== null\n                            ? \"MARKUNOX AI\"\n                            : nativeScoreNumber !== null\n                                ? \"WikiFX Live\"\n                                : \"\";\n\n                    const hasRegulation =\n                        String(\n                            broker.regulators ||\n                            \"\"\n                        ).trim() !== \"\" ||\n                        (\n                            sourceNative.licenseCount !== null &&\n                            Number(sourceNative.licenseCount) > 0\n                        );\n\n\n                    return `\n\n                        <div class=\"mx-ranking-row ${hasData ? \"\" : \"mx-data-pending-row\"}\">\n\n                            <div class=\"mx-col-rank\">\n                                <span class=\"mx-rank-circle ${rankClass(rank)}\">\n                                    ${rank}\n                                <\/span>\n                            <\/div>\n\n\n                            <div class=\"mx-col-broker\">\n                                ${renderBrokerIdentity(\n                                    broker,\n                                    brokerName\n                                )}\n                            <\/div>\n\n\n                            <div class=\"mx-col-verified\">\n                                ${renderBrokerVerification(\n                                    broker\n                                )}\n                            <\/div>\n\n\n                            <div class=\"mx-col-score\">\n                                ${\n                                    effectiveScore !== null\n                                        ? `\n                                            <strong class=\"mx-score-value\">\n                                                ${formatScore(\n                                                    effectiveScore\n                                                )}\n                                            <\/strong>\n\n                                            <div class=\"mx-stars\">\n                                                ${renderStars(\n                                                    effectiveScore\n                                                )}\n                                            <\/div>\n\n                                            <div class=\"mx-score-sources\">\n                                                <span class=\"mx-source-native-note\">\n                                                    ${\n                                                        scoreSource\n                                                            ? escapeHtml(\n                                                                scoreSource\n                                                              )\n                                                            : \"N\/A\"\n                                                    }\n                                                <\/span>\n\n                                                <span class=\"mx-ai-ranking-note\">\n                                                    AI Ranking\n                                                <\/span>\n                                            <\/div>\n                                          `\n                                        : `\n                                            <span class=\"mx-data-pending\">\n                                                DATA PENDING\n                                            <\/span>\n                                          `\n                                }\n                            <\/div>\n\n\n                            <div class=\"mx-col-regulation\">\n                                ${\n                                    hasRegulation\n                                        ? `\n                                            <strong class=\"mx-metric-score\">\n                                                ${formatLicenseCount(\n                                                    sourceNative.licenseCount\n                                                )}\n                                            <\/strong>\n\n                                            <span class=\"mx-regulated\">\n                                                REGULATED\n                                            <\/span>\n\n                                            <div class=\"mx-regulator-chips\">\n                                                ${renderRegulators(\n                                                    broker.regulators\n                                                )}\n                                            <\/div>\n                                          `\n                                        : `\n                                            <span class=\"mx-data-pending\">\n                                                DATA PENDING\n                                            <\/span>\n                                          `\n                                }\n                            <\/div>\n\n\n                            <div class=\"mx-col-trading\">\n                                ${\n                                    sourceNative.tradingGrade\n                                        ? `\n                                            <strong class=\"mx-metric-score\">\n                                                ${escapeHtml(\n                                                    sourceNative.tradingGrade\n                                                )}\n                                            <\/strong>\n\n                                            <span class=\"mx-source-native-note\">\n                                                WikiFX Trading ENV\n                                            <\/span>\n\n                                            <span class=\"mx-quality green\">\n                                                ${sourceGradeLabel(\n                                                    sourceNative.tradingGrade\n                                                )}\n                                            <\/span>\n                                          `\n                                        : `\n                                            <span class=\"mx-data-pending\">\n                                                DATA PENDING\n                                            <\/span>\n                                          `\n                                }\n                            <\/div>\n\n\n                            <div class=\"mx-col-popularity\">\n                                ${\n                                    sourceNative.influenceIndex !== null\n                                        ? `\n                                            <strong class=\"mx-metric-score\">\n                                                ${formatScore(\n                                                    sourceNative.influenceIndex\n                                                )}\n                                            <\/strong>\n\n                                            ${renderMeter(\n                                                sourceNative.influenceIndex,\n                                                \"blue\"\n                                            )}\n\n                                            <span class=\"mx-quality blue\">\n                                                ${\n                                                    sourceNative.influenceGrade\n                                                        ? `Influence ${escapeHtml(\n                                                            sourceNative.influenceGrade\n                                                          )}`\n                                                        : \"WikiFX Influence\"\n                                                }\n                                            <\/span>\n                                          `\n                                        : `\n                                            <span class=\"mx-data-pending\">\n                                                DATA PENDING\n                                            <\/span>\n                                          `\n                                }\n                            <\/div>\n\n\n                            <div class=\"mx-col-action\">\n\n                                <a\n                                    class=\"mx-action-details\"\n                                    href=\"\/broker\/${slug}\/\"\n                                >\n                                    Details\n                                <\/a>\n\n                                ${\n                                    hasData\n                                        ? `\n                                            <a\n                                                class=\"mx-action-compare\"\n                                                href=\"\/compare\/?broker1=${slug}&broker2=${slug === \"avatrade\" ? \"fxcm\" : \"avatrade\"}\"\n                                            >\n                                                Compare\n                                            <\/a>\n                                          `\n                                        : `\n                                            <span class=\"mx-action-compare mx-compare-disabled\">\n                                                Compare\n                                            <\/span>\n                                          `\n                                }\n\n                            <\/div>\n\n                        <\/div>\n                    `;\n\n                }).join(\"\");\n\n\n            if (\n                visibleCount <\n                sortedData.length\n            ) {\n\n                rows.insertAdjacentHTML(\n                    \"beforeend\",\n                    `\n                    <div class=\"mx-load-more-wrap\">\n                        <button\n                            type=\"button\"\n                            id=\"mx-load-more\"\n                            class=\"mx-load-more\"\n                        >\n                            Load More Brokers\n                        <\/button>\n                    <\/div>\n                    `\n                );\n\n                const loadMoreButton =\n                    document.getElementById(\n                        \"mx-load-more\"\n                    );\n\n                if (loadMoreButton) {\n\n                    loadMoreButton.addEventListener(\n                        \"click\",\n                        function () {\n\n                            visibleCount += 10;\n\n                            drawRows();\n                        }\n                    );\n                }\n            }\n        }\n\n\n        drawRows();\n    }\n\n\n    \/* =====================================================\n       ULTRA-FAST CLIENT RANKING\n       One network request loads the full broker dataset.\n       Tabs, categories and filters then run locally.\n    ====================================================== *\/\n\n    let masterRankingResult = null;\n    let masterRankingPromise = null;\n\n    function buildMasterUrl() {\n        const url = new URL(API);\n        url.searchParams.set(\"mode\", \"overall\");\n        url.searchParams.set(\"home\", \"0\");\n        url.searchParams.set(\"limit\", \"50\");\n        return url.toString();\n    }\n\n    function renderSkeleton(count = 6) {\n        rows.innerHTML =\n            Array.from({ length: count })\n                .map(function () {\n                    return `\n                        <div class=\"mx-ranking-row mx-ranking-skeleton\" aria-hidden=\"true\">\n                            <div class=\"mx-col-rank\"><span class=\"mx-skeleton-circle\"><\/span><\/div>\n                            <div class=\"mx-col-broker\"><div class=\"mx-skeleton-broker\"><span class=\"mx-skeleton-logo\"><\/span><div class=\"mx-skeleton-lines\"><span class=\"mx-skeleton-line wide\"><\/span><span class=\"mx-skeleton-line short\"><\/span><\/div><\/div><\/div>\n                            <div class=\"mx-col-score\"><span class=\"mx-skeleton-line medium center\"><\/span><\/div>\n                            <div class=\"mx-col-regulation\"><span class=\"mx-skeleton-line medium center\"><\/span><span class=\"mx-skeleton-line short center\"><\/span><\/div>\n                            <div class=\"mx-col-trading\"><span class=\"mx-skeleton-line medium center\"><\/span><\/div>\n                            <div class=\"mx-col-popularity\"><span class=\"mx-skeleton-line medium center\"><\/span><\/div>\n                            <div class=\"mx-col-action\"><span class=\"mx-skeleton-button\"><\/span><\/div>\n                        <\/div>`;\n                }).join(\"\");\n    }\n\n    function cacheStorageKey(url) {\n        return PERSISTENT_CACHE_PREFIX + encodeURIComponent(url);\n    }\n\n    function getCachedResult(url) {\n        const now = Date.now();\n        const memoryEntry = responseCache.get(url);\n        if (memoryEntry) {\n            return {\n                result: memoryEntry.result,\n                savedAt: memoryEntry.savedAt,\n                fresh: (now - memoryEntry.savedAt) <= CLIENT_CACHE_TTL\n            };\n        }\n        try {\n            const raw = window.localStorage.getItem(cacheStorageKey(url));\n            if (!raw) return null;\n            const entry = JSON.parse(raw);\n            if (!entry || !entry.result || !Number.isFinite(Number(entry.savedAt))) return null;\n            const age = now - Number(entry.savedAt);\n            if (age > PERSISTENT_CACHE_TTL) {\n                window.localStorage.removeItem(cacheStorageKey(url));\n                return null;\n            }\n            responseCache.set(url, { savedAt: Number(entry.savedAt), result: entry.result });\n            return { result: entry.result, savedAt: Number(entry.savedAt), fresh: age <= CLIENT_CACHE_TTL };\n        } catch (error) {\n            return null;\n        }\n    }\n\n    function setCachedResult(url, result) {\n        const entry = { savedAt: Date.now(), result: result };\n        responseCache.set(url, entry);\n        try {\n            window.localStorage.setItem(cacheStorageKey(url), JSON.stringify(entry));\n        } catch (error) {}\n    }\n\n    function numberOrNull(value) {\n        if (value === null || value === undefined || value === \"\") return null;\n        const n = Number(value);\n        return Number.isFinite(n) ? n : null;\n    }\n\n    function brokerMetric(broker, type) {\n        const native = getSourceNative(broker);\n\n        if (type === \"popular\") {\n            const directPopularity =\n                numberOrNull(broker.popularity_score);\n\n            return directPopularity !== null\n                ? directPopularity\n                : numberOrNull(native.influenceIndex);\n        }\n\n        if (type === \"trading\") {\n            const directTrading =\n                numberOrNull(broker.trading_score);\n\n            if (directTrading !== null) {\n                return directTrading;\n            }\n\n            const gradeMap = {\n                \"AAA\": 10,\n                \"AA\": 8.5,\n                \"A\": 7,\n                \"B\": 5.5,\n                \"C\": 4\n            };\n\n            return gradeMap[\n                String(native.tradingGrade || \"\").toUpperCase()\n            ] ?? null;\n        }\n\n        const displayScore =\n            numberOrNull(broker.display_score);\n\n        if (displayScore !== null) {\n            return displayScore;\n        }\n\n        const apiScore =\n            numberOrNull(broker.score);\n\n        if (apiScore !== null) {\n            return apiScore;\n        }\n\n        const storedScore =\n            numberOrNull(broker.markunox_score);\n\n        if (storedScore !== null) {\n            return storedScore;\n        }\n\n        return numberOrNull(native.ratingIndex);\n    }\n\n    function brokerMatchesClientFilters(broker) {\n        if (state.category && state.category !== \"all\") {\n            const categories = String(broker.instruments || \"\")\n                .split(\",\")\n                .map(function (item) { return item.trim().toLowerCase(); })\n                .filter(Boolean);\n            if (!categories.includes(String(state.category).toLowerCase())) return false;\n        }\n\n        if (state.country && String(broker.country_code || \"\").toUpperCase() !== String(state.country).toUpperCase()) return false;\n        if (state.verified && !broker.verified) return false;\n        if (state.islamic && !broker.has_islamic_account) return false;\n\n        if (state.minScore) {\n            const score = brokerMetric(broker, \"overall\");\n            if (score === null || score < Number(state.minScore)) return false;\n        }\n\n        if (state.minLicenses) {\n            const native = getSourceNative(broker);\n            const licenses = numberOrNull(native.licenseCount);\n            if (licenses === null || licenses < Number(state.minLicenses)) return false;\n        }\n\n        if (state.tradingGrade) {\n            const native = getSourceNative(broker);\n            const grade = String(native.tradingGrade || \"\").toUpperCase();\n            const order = { \"AAA\": 5, \"AA\": 4, \"A\": 3, \"B\": 2, \"C\": 1 };\n            const wanted = order[String(state.tradingGrade).toUpperCase()] || 0;\n            const actual = order[grade] || 0;\n            if (actual < wanted) return false;\n        }\n\n        if (state.minPopularity) {\n            const popularity = brokerMetric(broker, \"popular\");\n            if (popularity === null || popularity < Number(state.minPopularity)) return false;\n        }\n\n        if (state.mt4 || state.mt5) {\n            const details = getNativeDetails(broker);\n            const platforms = details.tradingPlatforms\n                .map(function (item) { return String(item || \"\").toLowerCase(); })\n                .join(\" \");\n\n            if (state.mt4 && !\/(^|\\W)(mt4|metatrader\\s*4)(\\W|$)\/i.test(platforms)) return false;\n            if (state.mt5 && !\/(^|\\W)(mt5|metatrader\\s*5)(\\W|$)\/i.test(platforms)) return false;\n        }\n\n\n        const nativeRaw =\n            broker &&\n            broker.source_native &&\n            typeof broker.source_native === \"object\"\n                ? broker.source_native\n                : {};\n\n        const details = getNativeDetails(broker);\n\n        if (state.fundingMethods.length) {\n            const funding = details.fundingMethods\n                .map(function (item) { return String(item || \"\").toLowerCase(); })\n                .join(\" \");\n\n            if (!state.fundingMethods.some(function (value) {\n                return funding.includes(String(value).toLowerCase());\n            })) return false;\n        }\n\n        if (state.maxMinimumDeposit) {\n            const rawDeposit = String(details.minimumDeposit || \"\");\n            const match = rawDeposit.replace(\/,\/g, \"\").match(\/[\\d.]+\/);\n            const deposit = match ? Number(match[0]) : null;\n\n            if (deposit === null || !Number.isFinite(deposit) || deposit > Number(state.maxMinimumDeposit)) {\n                return false;\n            }\n        }\n\n        if (state.executionManagement.length) {\n            const hay = [\n                nativeRaw.execution_management,\n                nativeRaw.execution_model,\n                nativeRaw.execution_method,\n                nativeRaw.order_management\n            ].map(function (v) { return String(v || \"\").toLowerCase(); }).join(\" \");\n\n            if (!state.executionManagement.some(function (value) {\n                return hay.includes(String(value).toLowerCase());\n            })) return false;\n        }\n\n        if (state.spreadModels.length) {\n            const hay = [\n                nativeRaw.spread_type,\n                nativeRaw.spread_model,\n                nativeRaw.spreads\n            ].map(function (v) { return String(v || \"\").toLowerCase(); }).join(\" \");\n\n            if (!state.spreadModels.some(function (value) {\n                return hay.includes(String(value).toLowerCase());\n            })) return false;\n        }\n\n        if (state.executionTypes.length) {\n            const hay = [\n                nativeRaw.execution_type,\n                nativeRaw.execution_model,\n                nativeRaw.order_execution_type,\n                nativeRaw.broker_model\n            ].map(function (v) { return String(v || \"\").toLowerCase(); }).join(\" \");\n\n            if (!state.executionTypes.some(function (value) {\n                return hay.includes(String(value).toLowerCase());\n            })) return false;\n        }\n\n        if (state.platforms.length) {\n            const platforms = details.tradingPlatforms\n                .map(function (item) { return String(item || \"\").toLowerCase(); })\n                .join(\" \");\n\n            if (!state.platforms.some(function (value) {\n                return platforms.includes(String(value).toLowerCase());\n            })) return false;\n        }\n\n        if (state.minYears) {\n            let years = null;\n            const established = Number(String(details.establishedYear || \"\").match(\/\\d{4}\/)?.[0] || \"\");\n            if (Number.isFinite(established) && established > 1900) {\n                years = new Date().getFullYear() - established;\n            } else {\n                const opMatch = String(details.operatingPeriod || \"\").match(\/[\\d.]+\/);\n                if (opMatch) years = Number(opMatch[0]);\n            }\n\n            if (years === null || !Number.isFinite(years) || years < Number(state.minYears)) {\n                return false;\n            }\n        }\n\n        const regulatorText = [\n            broker.regulators,\n            details.regulatorCountries.join(\" \"),\n            nativeRaw.primary_regulators,\n            nativeRaw.offshore_regulators,\n            nativeRaw.regulators\n        ].map(function (v) {\n            if (Array.isArray(v)) return v.join(\" \");\n            return String(v || \"\");\n        }).join(\" \").toLowerCase();\n\n        if (state.primaryRegulators.length) {\n            if (!state.primaryRegulators.some(function (value) {\n                return regulatorText.includes(String(value).toLowerCase());\n            })) return false;\n        }\n\n        if (state.offshoreRegulators.length) {\n            if (!state.offshoreRegulators.some(function (value) {\n                return regulatorText.includes(String(value).toLowerCase());\n            })) return false;\n        }\n\n        if (state.q) {\n            const q = String(state.q).trim().toLowerCase();\n            const details = getNativeDetails(broker);\n            const haystack = [\n                broker.name,\n                broker.legal_name,\n                broker.slug,\n                broker.country_code,\n                details.registeredRegion,\n                details.companyName,\n                details.tradingPlatforms.join(\" \")\n            ]\n                .map(function (value) { return String(value || \"\").toLowerCase(); })\n                .join(\" \");\n            if (!haystack.includes(q)) return false;\n        }\n\n        return true;\n    }\n\n    function applyClientRanking() {\n        if (!masterRankingResult || !Array.isArray(masterRankingResult.data)) return;\n\n        if (state.mode === \"scam\") {\n            render([]);\n            return;\n        }\n\n        let data = masterRankingResult.data\n            .filter(brokerMatchesClientFilters)\n            .map(function (broker) { return Object.assign({}, broker); });\n\n        if (state.mode === \"popular\") {\n            data.sort(function (a, b) {\n                return (brokerMetric(b, \"popular\") ?? -Infinity) - (brokerMetric(a, \"popular\") ?? -Infinity);\n            });\n        } else if (state.mode === \"trading\") {\n            data.sort(function (a, b) {\n                return (brokerMetric(b, \"trading\") ?? -Infinity) - (brokerMetric(a, \"trading\") ?? -Infinity);\n            });\n        } else if (state.mode === \"brand\") {\n            data.sort(function (a, b) {\n                return (brokerMetric(b, \"overall\") ?? -Infinity) - (brokerMetric(a, \"overall\") ?? -Infinity);\n            });\n        } else {\n            const HOME_TOP_10 = [\n                \"avatrade\",\n                \"fxcm\",\n                \"gtcfx\",\n                \"ec-markets\",\n                \"atfx\",\n                \"vantage\",\n                \"startrader\",\n                \"ic-markets\",\n                \"pepperstone\",\n                \"fp-markets\"\n            ];\n\n            const homeOrder = new Map(\n                HOME_TOP_10.map(function (slug, index) {\n                    return [slug, index + 1];\n                })\n            );\n\n            data.sort(function (a, b) {\n                const aSlug = String(a.slug || \"\").toLowerCase();\n                const bSlug = String(b.slug || \"\").toLowerCase();\n                const aHome = homeOrder.get(aSlug) || 0;\n                const bHome = homeOrder.get(bSlug) || 0;\n\n                if (aHome && bHome) return aHome - bHome;\n                if (aHome) return -1;\n                if (bHome) return 1;\n\n                const ar = numberOrNull(a.rank);\n                const br = numberOrNull(b.rank);\n                if (ar !== null && br !== null) return ar - br;\n                if (ar !== null) return -1;\n                if (br !== null) return 1;\n\n                return (brokerMetric(b, \"overall\") ?? -Infinity) - (brokerMetric(a, \"overall\") ?? -Infinity);\n            });\n\n            \/* Canonical MARKUNOX Home Top 10 always keep ranks 1\u201310. *\/\n            let nextRank = 11;\n            data.forEach(function (broker) {\n                const slug = String(broker.slug || \"\").toLowerCase();\n                const fixedHomeRank = homeOrder.get(slug) || 0;\n                broker.rank = fixedHomeRank || nextRank++;\n            });\n        }\n\n        if (state.mode !== \"overall\") {\n            data.forEach(function (broker, index) {\n                broker.rank = index + 1;\n            });\n        }\n\n        render(data);\n        if (lastUpdate) lastUpdate.textContent = \"Last Update: LIVE\";\n    }\n\n    \/* =====================================================\n       COMPLETE METRICS ENRICHMENT\n       The full-list endpoint is fast but can omit some live metrics.\n       We keep that fast first paint, then enrich broker rows from\n       the broker-specific q endpoint in small controlled batches.\n    ====================================================== *\/\n\n    const mxBrokerDetailCache = new Map();\n    let mxEnrichmentRunId = 0;\n\n    function mxRankingRequestHeaders() {\n\n        const headers = {\n            Accept: \"application\/json\"\n        };\n\n        if (\n            window.MarkunoxAccess &&\n            window.MarkunoxAccess.token\n        ) {\n            headers[\"X-Markunox-Auth\"] =\n                window.MarkunoxAccess.token;\n        }\n\n        return headers;\n    }\n\n    function mxUsefulValue(value) {\n\n        if (\n            value === null ||\n            value === undefined ||\n            value === \"\"\n        ) {\n            return false;\n        }\n\n        if (Array.isArray(value)) {\n            return value.length > 0;\n        }\n\n        if (\n            typeof value === \"object\"\n        ) {\n            return Object.keys(value).length > 0;\n        }\n\n        return true;\n    }\n\n    function mxMergeObjectUseful(\n        base,\n        incoming\n    ) {\n\n        const output =\n            Object.assign(\n                {},\n                base && typeof base === \"object\"\n                    ? base\n                    : {}\n            );\n\n        if (\n            !incoming ||\n            typeof incoming !== \"object\"\n        ) {\n            return output;\n        }\n\n        Object.keys(incoming)\n            .forEach(function (key) {\n\n                if (\n                    mxUsefulValue(\n                        incoming[key]\n                    )\n                ) {\n                    output[key] =\n                        incoming[key];\n                }\n            });\n\n        return output;\n    }\n\n    function mxMergeFullBroker(\n        basic,\n        full\n    ) {\n\n        if (\n            !basic ||\n            !full ||\n            typeof full !== \"object\"\n        ) {\n            return basic;\n        }\n\n        const originalRank =\n            basic.rank;\n\n        Object.keys(full)\n            .forEach(function (key) {\n\n                if (\n                    key === \"rank\" ||\n                    key === \"source_native\" ||\n                    key === \"source_metrics\"\n                ) {\n                    return;\n                }\n\n                if (\n                    mxUsefulValue(\n                        full[key]\n                    )\n                ) {\n                    basic[key] =\n                        full[key];\n                }\n            });\n\n        basic.source_native =\n            mxMergeObjectUseful(\n                basic.source_native,\n                full.source_native\n            );\n\n        basic.source_metrics =\n            mxMergeObjectUseful(\n                basic.source_metrics,\n                full.source_metrics\n            );\n\n        basic.rank =\n            originalRank;\n\n        return basic;\n    }\n\n    function mxBrokerHasCompleteMetrics(\n        broker\n    ) {\n\n        if (\n            !broker ||\n            typeof broker !== \"object\"\n        ) {\n            return true;\n        }\n\n        const native =\n            getSourceNative(broker);\n\n        const score =\n            brokerMetric(\n                broker,\n                \"overall\"\n            );\n\n        const popularity =\n            numberOrNull(\n                native.influenceIndex\n            );\n\n        const tradingGrade =\n            String(\n                native.tradingGrade || \"\"\n            ).trim();\n\n        const licenseCount =\n            numberOrNull(\n                native.licenseCount\n            );\n\n        const regulatorText =\n            String(\n                broker.regulators || \"\"\n            ).trim();\n\n        \/*\n         * If regulator names exist but the list endpoint says 0 licenses,\n         * the compact response is incomplete and must still be enriched.\n         *\/\n        const licenseReady =\n            licenseCount !== null &&\n            (\n                licenseCount > 0 ||\n                regulatorText === \"\"\n            );\n\n        return (\n            score !== null &&\n            popularity !== null &&\n            tradingGrade !== \"\" &&\n            licenseReady\n        );\n    }\n\n    function mxDetailStorageKey(slug) {\n        return BROKER_DETAIL_CACHE_PREFIX + encodeURIComponent(slug);\n    }\n\n    function mxGetStoredBrokerDetail(slug) {\n        try {\n            const raw = window.localStorage.getItem(mxDetailStorageKey(slug));\n            if (!raw) return null;\n\n            const entry = JSON.parse(raw);\n            if (!entry || !entry.data || !Number.isFinite(Number(entry.savedAt))) {\n                return null;\n            }\n\n            const age = Date.now() - Number(entry.savedAt);\n            if (age > BROKER_DETAIL_CACHE_TTL) {\n                window.localStorage.removeItem(mxDetailStorageKey(slug));\n                return null;\n            }\n\n            return entry.data;\n        } catch (error) {\n            return null;\n        }\n    }\n\n    function mxStoreBrokerDetail(slug, data) {\n        try {\n            window.localStorage.setItem(\n                mxDetailStorageKey(slug),\n                JSON.stringify({\n                    savedAt: Date.now(),\n                    data: data\n                })\n            );\n        } catch (error) {}\n    }\n\n    function mxBrokerQueryCandidates(broker) {\n\n        const slug = String(\n            broker && broker.slug || \"\"\n        ).trim().toLowerCase();\n\n        const name = String(\n            broker && broker.name || \"\"\n        ).trim().toLowerCase();\n\n        const aliases = {\n            \"gtcfx\": [\"gtcfx\", \"gtc-fx\"],\n            \"gtc-fx\": [\"gtc-fx\", \"gtcfx\"],\n            \"ec-markets\": [\"ec-markets\", \"ecmarkets\"],\n            \"ecmarkets\": [\"ecmarkets\", \"ec-markets\"],\n            \"ic-markets\": [\"ic-markets\", \"icmarkets\"],\n            \"icmarkets\": [\"icmarkets\", \"ic-markets\"],\n            \"fp-markets\": [\"fp-markets\", \"fpmarkets\"],\n            \"fpmarkets\": [\"fpmarkets\", \"fp-markets\"],\n            \"startrader\": [\"startrader\", \"star-trader\"],\n            \"star-trader\": [\"star-trader\", \"startrader\"],\n            \"avatrade\": [\"avatrade\", \"ava-trade\"],\n            \"ava-trade\": [\"ava-trade\", \"avatrade\"]\n        };\n\n        const values = [];\n\n        function push(value) {\n            const clean = String(value || \"\")\n                .trim()\n                .toLowerCase();\n            if (clean && !values.includes(clean)) {\n                values.push(clean);\n            }\n        }\n\n        (aliases[slug] || [slug]).forEach(push);\n        push(slug.replace(\/-\/g, \"\"));\n        push(name.replace(\/[^a-z0-9]+\/g, \"-\"));\n        push(name.replace(\/[^a-z0-9]+\/g, \"\"));\n\n        return values.slice(0, 4);\n    }\n\n    function mxFindBrokerInQueryResult(result, broker, query) {\n\n        if (\n            !result ||\n            !Array.isArray(result.data) ||\n            !result.data.length\n        ) {\n            return null;\n        }\n\n        const wantedSlug = String(\n            broker && broker.slug || \"\"\n        ).trim().toLowerCase();\n\n        const wantedName = String(\n            broker && broker.name || \"\"\n        ).trim().toLowerCase();\n\n        const normalized = function (value) {\n            return String(value || \"\")\n                .toLowerCase()\n                .replace(\/[^a-z0-9]+\/g, \"\");\n        };\n\n        const exact = result.data.find(function (item) {\n            const itemSlug = String(item && item.slug || \"\")\n                .trim()\n                .toLowerCase();\n            const itemName = String(item && item.name || \"\")\n                .trim()\n                .toLowerCase();\n\n            return (\n                itemSlug === wantedSlug ||\n                normalized(itemSlug) === normalized(wantedSlug) ||\n                normalized(itemName) === normalized(wantedName) ||\n                normalized(itemSlug) === normalized(query)\n            );\n        });\n\n        if (exact) {\n            return exact;\n        }\n\n        return result.data.length === 1\n            ? result.data[0]\n            : null;\n    }\n\n    function mxBrokerDetailPayloadUseful(broker) {\n        if (!broker || typeof broker !== \"object\") return false;\n        const native = getSourceNative(broker);\n        return (\n            numberOrNull(native.ratingIndex) !== null ||\n            numberOrNull(native.influenceIndex) !== null ||\n            String(native.tradingGrade || \"\").trim() !== \"\" ||\n            numberOrNull(native.licenseCount) !== null\n        );\n    }\n\n    async function mxFetchFullBroker(\n        broker,\n        options = {}\n    ) {\n\n        if (\n            !broker ||\n            !broker.slug\n        ) {\n            return null;\n        }\n\n        const slug =\n            String(broker.slug)\n                .trim()\n                .toLowerCase();\n\n        if (!slug) {\n            return null;\n        }\n\n        if (mxBrokerDetailCache.has(slug)) {\n            const memory = mxBrokerDetailCache.get(slug);\n            if (mxBrokerDetailPayloadUseful(memory)) {\n                return memory;\n            }\n            mxBrokerDetailCache.delete(slug);\n        }\n\n        if (!options.force) {\n            const stored =\n                mxGetStoredBrokerDetail(slug);\n\n            if (stored && mxBrokerDetailPayloadUseful(stored)) {\n                mxBrokerDetailCache.set(slug, stored);\n                return stored;\n            }\n        }\n\n        const queries =\n            mxBrokerQueryCandidates(broker);\n\n        for (const query of queries) {\n\n            const url = new URL(API);\n            url.searchParams.set(\"mode\", \"overall\");\n            url.searchParams.set(\"q\", query);\n\n            const controller =\n                new AbortController();\n\n            const timer =\n                setTimeout(function () {\n                    controller.abort();\n                }, 9000);\n\n            try {\n\n                const response =\n                    await fetch(\n                        url.toString(),\n                        {\n                            headers: mxRankingRequestHeaders(),\n                            cache: \"no-store\",\n                            signal: controller.signal\n                        }\n                    );\n\n                if (!response.ok) {\n                    continue;\n                }\n\n                const result =\n                    await response.json();\n\n                if (\n                    !result ||\n                    result.status !== \"ok\"\n                ) {\n                    continue;\n                }\n\n                const exact =\n                    mxFindBrokerInQueryResult(\n                        result,\n                        broker,\n                        query\n                    );\n\n                if (\n                    exact &&\n                    mxBrokerDetailPayloadUseful(exact)\n                ) {\n                    mxBrokerDetailCache.set(slug, exact);\n                    mxStoreBrokerDetail(slug, exact);\n                    return exact;\n                }\n\n            } catch (error) {\n                \/* Try the next alias\/query candidate. *\/\n            } finally {\n                clearTimeout(timer);\n            }\n        }\n\n        return null;\n    }\n\n    function mxPriorityBrokerSlugs() {\n        return new Set([\n            \"avatrade\",\n            \"fxcm\",\n            \"gtcfx\",\n            \"ec-markets\",\n            \"atfx\",\n            \"vantage\",\n            \"startrader\",\n            \"ic-markets\",\n            \"pepperstone\",\n            \"fp-markets\"\n        ]);\n    }\n\n    function mxHydrateFromDetailCache(rankingResult) {\n        if (\n            !rankingResult ||\n            !Array.isArray(rankingResult.data)\n        ) {\n            return false;\n        }\n\n        let changed = false;\n\n        rankingResult.data.forEach(function (broker) {\n            if (!broker || !broker.slug) return;\n\n            const slug = String(broker.slug).trim().toLowerCase();\n            const cached = mxGetStoredBrokerDetail(slug);\n\n            if (\n                cached &&\n                mxBrokerDetailPayloadUseful(cached)\n            ) {\n                mxBrokerDetailCache.set(slug, cached);\n                mxMergeFullBroker(broker, cached);\n                changed = true;\n            }\n        });\n\n        return changed;\n    }\n\n    async function mxEnrichBrokerBatch(\n        batch,\n        rankingResult\n    ) {\n        if (!Array.isArray(batch) || !batch.length) {\n            return;\n        }\n\n        await Promise.all(\n            batch.map(\n                async function (broker) {\n                    const full =\n                        await mxFetchFullBroker(\n                            broker\n                        );\n\n                    if (full) {\n                        mxMergeFullBroker(\n                            broker,\n                            full\n                        );\n                    }\n                }\n            )\n        );\n\n        if (\n            masterRankingResult ===\n            rankingResult\n        ) {\n            applyClientRanking();\n        }\n    }\n\n    async function mxEnrichRankingData(\n        rankingResult,\n        cacheUrl\n    ) {\n\n        if (\n            !rankingResult ||\n            !Array.isArray(\n                rankingResult.data\n            ) ||\n            !rankingResult.data.length\n        ) {\n            return rankingResult;\n        }\n\n        const runId =\n            ++mxEnrichmentRunId;\n\n        const brokers =\n            rankingResult.data;\n\n        \/*\n         * Reuse any complete per-broker cache immediately.\n         *\/\n        const cacheChanged =\n            mxHydrateFromDetailCache(\n                rankingResult\n            );\n\n        if (cacheChanged) {\n            applyClientRanking();\n        }\n\n        \/*\n         * IMPORTANT:\n         * The compact full-list endpoint can return incomplete source_native\n         * values. Every broker that is still incomplete is therefore queried\n         * by its own q=slug endpoint.\n         *\/\n        const queue =\n            brokers\n                .filter(function (broker) {\n                    return !mxBrokerHasCompleteMetrics(\n                        broker\n                    );\n                })\n                .sort(function (a, b) {\n                    return (\n                        numberOrNull(a.rank) ?? 9999\n                    ) - (\n                        numberOrNull(b.rank) ?? 9999\n                    );\n                });\n\n        if (!queue.length) {\n            setCachedResult(\n                cacheUrl,\n                rankingResult\n            );\n            return rankingResult;\n        }\n\n        \/*\n         * Run ALL incomplete brokers, not only the first visible group.\n         * A small worker pool keeps the API responsive while remaining fast.\n         *\/\n        const CONCURRENCY = 5;\n        let nextIndex = 0;\n        let changedSinceRender = 0;\n        let lastRenderAt = performance.now();\n\n        async function worker() {\n\n            while (true) {\n\n                if (\n                    runId !==\n                    mxEnrichmentRunId\n                ) {\n                    return;\n                }\n\n                const index =\n                    nextIndex++;\n\n                if (\n                    index >=\n                    queue.length\n                ) {\n                    return;\n                }\n\n                const broker =\n                    queue[index];\n\n                const full =\n                    await mxFetchFullBroker(\n                        broker\n                    );\n\n                if (full) {\n\n                    mxMergeFullBroker(\n                        broker,\n                        full\n                    );\n\n                    changedSinceRender++;\n                }\n\n                \/*\n                 * Refresh progressively so users see completed metrics quickly,\n                 * but avoid redrawing after every single request.\n                 *\/\n                const now =\n                    performance.now();\n\n                if (\n                    changedSinceRender >= 3 ||\n                    now - lastRenderAt >= 450\n                ) {\n\n                    if (\n                        masterRankingResult ===\n                        rankingResult\n                    ) {\n                        applyClientRanking();\n                    }\n\n                    setCachedResult(\n                        cacheUrl,\n                        rankingResult\n                    );\n\n                    changedSinceRender = 0;\n                    lastRenderAt = now;\n                }\n            }\n        }\n\n        const workers =\n            Array.from(\n                {\n                    length:\n                        Math.min(\n                            CONCURRENCY,\n                            queue.length\n                        )\n                },\n                function () {\n                    return worker();\n                }\n            );\n\n        await Promise.all(\n            workers\n        );\n\n        if (\n            runId !==\n            mxEnrichmentRunId\n        ) {\n            return rankingResult;\n        }\n\n        \/*\n         * Final redraw guarantees that brokers below the first rows\n         * also receive Score \/ Trading ENV \/ Popularity \/ Licenses.\n         *\/\n        if (\n            masterRankingResult ===\n            rankingResult\n        ) {\n            applyClientRanking();\n        }\n\n        setCachedResult(\n            cacheUrl,\n            rankingResult\n        );\n\n        return rankingResult;\n    }\n\n    async function loadMasterRanking(options = {}) {\n\n        if (\n            masterRankingPromise &&\n            !options.force\n        ) {\n            return masterRankingPromise;\n        }\n\n        const url =\n            buildMasterUrl();\n\n        const cached =\n            options.force\n                ? null\n                : getCachedResult(url);\n\n        if (\n            cached &&\n            cached.result\n        ) {\n\n            masterRankingResult =\n                cached.result;\n\n            populateMeta(\n                masterRankingResult.meta\n            );\n\n            mxHydrateFromDetailCache(\n                masterRankingResult\n            );\n\n            applyClientRanking();\n\n            \/*\n             * Even a fresh list-cache may have been created before\n             * broker-specific metrics were available. Enrich it in\n             * the background without blocking the page.\n             *\/\n            mxEnrichRankingData(\n                masterRankingResult,\n                url\n            ).catch(function (error) {\n                console.warn(\n                    \"MARKUNOX Ranking enrichment:\",\n                    error\n                );\n            });\n\n            if (\n                cached.fresh &&\n                !options.force\n            ) {\n                return masterRankingResult;\n            }\n\n        } else {\n\n            renderSkeleton(6);\n        }\n\n        masterRankingPromise =\n            fetch(\n                url,\n                {\n                    headers:\n                        mxRankingRequestHeaders(),\n\n                    cache:\n                        \"default\"\n                }\n            )\n            .then(function (response) {\n\n                if (!response.ok) {\n                    throw new Error(\n                        \"Ranking request failed\"\n                    );\n                }\n\n                return response.json();\n            })\n            .then(function (result) {\n\n                if (\n                    !result ||\n                    result.status !== \"ok\"\n                ) {\n                    throw new Error(\n                        result &&\n                        (\n                            result.debug ||\n                            result.message\n                        ) ||\n                        \"Ranking request failed\"\n                    );\n                }\n\n                masterRankingResult =\n                    result;\n\n                populateMeta(\n                    result.meta\n                );\n\n                \/*\n                 * Reuse broker-specific cache before first paint.\n                 *\/\n                mxHydrateFromDetailCache(\n                    masterRankingResult\n                );\n\n                \/*\n                 * First paint stays fast using the full-list endpoint.\n                 *\/\n                applyClientRanking();\n\n                \/*\n                 * Complete missing Score \/ Trading ENV \/ Popularity\n                 * from each broker-specific q endpoint in background.\n                 *\/\n                mxEnrichRankingData(\n                    masterRankingResult,\n                    url\n                ).catch(function (error) {\n                    console.warn(\n                        \"MARKUNOX Ranking enrichment:\",\n                        error\n                    );\n                });\n\n                return result;\n            })\n            .catch(function (error) {\n\n                console.error(\n                    \"MARKUNOX Ranking Error:\",\n                    error\n                );\n\n                if (!masterRankingResult) {\n\n                    rows.innerHTML =\n                        `<div class=\"mx-ranking-state\">Unable to load ranking.<\/div>`;\n                }\n\n                return masterRankingResult;\n            })\n            .finally(function () {\n\n                masterRankingPromise =\n                    null;\n            });\n\n        return masterRankingPromise;\n    }\n\n\n    \/* =====================================================\n       TABS \u2014 INSTANT, NO NETWORK REQUEST\n    ====================================================== *\/\n\n    app.querySelectorAll(\".mx-rank-tabs button\").forEach(function (button) {\n        button.addEventListener(\"click\", function () {\n            app.querySelectorAll(\".mx-rank-tabs button\").forEach(function (item) {\n                item.classList.remove(\"active\");\n            });\n            button.classList.add(\"active\");\n            state.mode = button.dataset.mode;\n            applyClientRanking();\n        });\n    });\n\n    \/* =====================================================\n       CATEGORY \u2014 INSTANT, NO NETWORK REQUEST\n    ====================================================== *\/\n\n    if (categoryButton && categoryMenu) {\n        categoryButton.addEventListener(\"click\", function () {\n            const opening = !categoryMenu.classList.contains(\"open\");\n            categoryMenu.classList.toggle(\"open\", opening);\n            categoryButton.setAttribute(\"aria-expanded\", opening ? \"true\" : \"false\");\n        });\n\n        categoryMenu.addEventListener(\"click\", function (event) {\n            const option = event.target.closest(\".mx-category-option\");\n            if (!option) return;\n            const value = option.dataset.value || \"all\";\n            categorySelect.value = value;\n            state.category = value;\n            refreshCategoryMenu();\n            closeCategoryMenu();\n            applyClientRanking();\n        });\n\n        document.addEventListener(\"click\", function (event) {\n            if (!event.target.closest(\".mx-category-custom\")) closeCategoryMenu();\n        });\n        document.addEventListener(\"keydown\", function (event) {\n            if (event.key === \"Escape\") closeCategoryMenu();\n        });\n    }\n\n    \/* =====================================================\n       FILTER OPEN \u2014 PURE UI, INSTANT\n    ====================================================== *\/\n\n    filterToggle.addEventListener(\"click\", function () {\n        filterPanel.classList.toggle(\"open\");\n        document.body.classList.toggle(\"mx-filter-drawer-open\", filterPanel.classList.contains(\"open\"));\n    });\n\n    if (filterClose) {\n        filterClose.addEventListener(\"click\", function () {\n            filterPanel.classList.remove(\"open\");\n            document.body.classList.remove(\"mx-filter-drawer-open\");\n        });\n    }\n\n    function applyProfessionalFilters() {\n        state.q = searchInput.value.trim();\n        state.country = countrySelect.value;\n        state.minScore = scoreSelect.value;\n        state.verified = verifiedInput.checked;\n        state.islamic = islamicInput.checked;\n        state.minLicenses = licensesSelect ? licensesSelect.value : \"\";\n        state.tradingGrade = tradingGradeSelect ? tradingGradeSelect.value : \"\";\n        state.minPopularity = popularitySelect ? popularitySelect.value : \"\";\n        state.mt4 = mt4Input ? mt4Input.checked : false;\n        state.mt5 = mt5Input ? mt5Input.checked : false;\n\n        function checkedValues(group) {\n            return Array.from(\n                filterPanel.querySelectorAll(\n                    '[data-filter-group=\"' + group + '\"] input:checked'\n                )\n            ).map(function (input) {\n                return String(input.value || \"\");\n            }).filter(Boolean);\n        }\n\n        state.fundingMethods = checkedValues(\"funding\");\n        state.executionManagement = checkedValues(\"execution-management\");\n        state.spreadModels = checkedValues(\"spread\");\n        state.executionTypes = checkedValues(\"execution-type\");\n        state.platforms = checkedValues(\"platforms\");\n        state.primaryRegulators = checkedValues(\"primary-regulators\");\n        state.offshoreRegulators = checkedValues(\"offshore-regulators\");\n\n        const depositRadio =\n            filterPanel.querySelector('input[name=\"mx-min-deposit\"]:checked');\n\n        state.maxMinimumDeposit =\n            depositRadio ? String(depositRadio.value || \"\") : \"\";\n\n        const yearsRadio =\n            filterPanel.querySelector('input[name=\"mx-years\"]:checked');\n\n        state.minYears =\n            yearsRadio ? String(yearsRadio.value || \"\") : \"\";\n\n        applyClientRanking();\n    }\n\n\n    \/* =====================================================\n       LIVE FILTERING \u2014 NO \"SHOW RESULTS\" BUTTON\n       Changes apply immediately on the client.\n    ====================================================== *\/\n\n    let mxLiveFilterTimer = null;\n    let mxLiveFilterFrame = null;\n\n    function runLiveFilterNow() {\n        if (mxLiveFilterTimer) {\n            clearTimeout(mxLiveFilterTimer);\n            mxLiveFilterTimer = null;\n        }\n\n        if (mxLiveFilterFrame) {\n            cancelAnimationFrame(mxLiveFilterFrame);\n        }\n\n        mxLiveFilterFrame = requestAnimationFrame(function () {\n            mxLiveFilterFrame = null;\n            applyProfessionalFilters();\n        });\n    }\n\n    function runLiveFilterDebounced(delay) {\n        if (mxLiveFilterTimer) {\n            clearTimeout(mxLiveFilterTimer);\n        }\n\n        mxLiveFilterTimer = setTimeout(function () {\n            mxLiveFilterTimer = null;\n            runLiveFilterNow();\n        }, delay || 90);\n    }\n\n    \/* Native checkbox \/ radio \/ select changes. *\/\n    filterPanel.addEventListener(\"change\", function (event) {\n        const target = event.target;\n\n        if (!target) return;\n\n        if (\n            target.matches(\n                'input[type=\"checkbox\"], input[type=\"radio\"], select'\n            )\n        ) {\n            runLiveFilterNow();\n        }\n    });\n\n    \/* Custom list options update hidden selects on click. *\/\n    filterPanel.addEventListener(\"click\", function (event) {\n        const option = event.target.closest(\".mx-list-option\");\n\n        if (!option) return;\n\n        \/* Let the option's own click handler update the hidden select first. *\/\n        setTimeout(runLiveFilterNow, 0);\n    });\n\n    \/* Broker-name search applies while typing, with a tiny debounce. *\/\n    searchInput.addEventListener(\"input\", function () {\n        runLiveFilterDebounced(90);\n    });\n\n\n    document.getElementById(\"mx-filter-reset\").addEventListener(\"click\", function () {\n        searchInput.value = \"\";\n        countrySelect.value = \"\";\n        scoreSelect.value = \"\";\n        verifiedInput.checked = false;\n        islamicInput.checked = false;\n\n        if (licensesSelect) licensesSelect.value = \"\";\n        if (tradingGradeSelect) tradingGradeSelect.value = \"\";\n        if (popularitySelect) popularitySelect.value = \"\";\n        if (mt4Input) mt4Input.checked = false;\n        if (mt5Input) mt5Input.checked = false;\n\n        state.q = \"\";\n        state.country = \"\";\n        state.minScore = \"\";\n        state.verified = false;\n        state.islamic = false;\n        state.minLicenses = \"\";\n        state.tradingGrade = \"\";\n        state.minPopularity = \"\";\n        state.mt4 = false;\n        state.mt5 = false;\n\n        state.fundingMethods = [];\n        state.maxMinimumDeposit = \"\";\n        state.executionManagement = [];\n        state.spreadModels = [];\n        state.executionTypes = [];\n        state.platforms = [];\n        state.minYears = \"\";\n        state.primaryRegulators = [];\n        state.offshoreRegulators = [];\n\n        filterPanel.querySelectorAll(\".mx-static-filter-list input\").forEach(function (input) {\n            input.checked = false;\n        });\n\n\n        applyClientRanking();\n    });\n    \/* =====================================================\n       FILTER CUSTOM SELECTS\n    ====================================================== *\/\n\n    function setupCustomSelect(wrapper) {\n\n        const selectId =\n            wrapper.dataset.selectId;\n\n        const select =\n            document.getElementById(\n                selectId\n            );\n\n        const button =\n            wrapper.querySelector(\n                \".mx-custom-select-button\"\n            );\n\n        const label =\n            wrapper.querySelector(\n                \".mx-custom-select-label\"\n            );\n\n        const menu =\n            wrapper.querySelector(\n                \".mx-custom-select-menu\"\n            );\n\n\n        if (\n            !select ||\n            !button ||\n            !label ||\n            !menu\n        ) {\n            return null;\n        }\n\n\n        function refresh() {\n\n            const options =\n                Array.from(\n                    select.options\n                );\n\n            const selected =\n                options.find(function (option) {\n                    return option.value === select.value;\n                }) ||\n                options[0];\n\n\n            label.textContent =\n                selected\n                    ? selected.textContent.trim()\n                    : \"\";\n\n\n            menu.innerHTML =\n                options\n                    .map(function (option) {\n\n                        const active =\n                            option.value ===\n                            select.value;\n\n                        return `\n                            <button\n                                type=\"button\"\n                                class=\"mx-custom-select-option${active ? \" active\" : \"\"}\"\n                                data-value=\"${escapeHtml(option.value)}\"\n                                role=\"option\"\n                                aria-selected=\"${active ? \"true\" : \"false\"}\"\n                            >\n                                ${escapeHtml(option.textContent.trim())}\n                            <\/button>\n                        `;\n                    })\n                    .join(\"\");\n        }\n\n\n        function close() {\n\n            menu.classList.remove(\n                \"open\"\n            );\n\n            button.setAttribute(\n                \"aria-expanded\",\n                \"false\"\n            );\n        }\n\n\n        button.addEventListener(\n            \"click\",\n            function () {\n\n                document\n                    .querySelectorAll(\n                        \"#mx-ranking-app .mx-custom-select-menu.open\"\n                    )\n                    .forEach(function (otherMenu) {\n\n                        if (otherMenu !== menu) {\n                            otherMenu\n                                .classList\n                                .remove(\"open\");\n                        }\n                    });\n\n\n                const opening =\n                    !menu\n                        .classList\n                        .contains(\"open\");\n\n                menu\n                    .classList\n                    .toggle(\n                        \"open\",\n                        opening\n                    );\n\n                button.setAttribute(\n                    \"aria-expanded\",\n                    opening\n                        ? \"true\"\n                        : \"false\"\n                );\n            }\n        );\n\n\n        menu.addEventListener(\n            \"click\",\n            function (event) {\n\n                const option =\n                    event.target.closest(\n                        \".mx-custom-select-option\"\n                    );\n\n                if (!option) {\n                    return;\n                }\n\n\n                select.value =\n                    option.dataset.value || \"\";\n\n                select.dispatchEvent(\n                    new Event(\n                        \"change\",\n                        {\n                            bubbles: true\n                        }\n                    )\n                );\n\n                refresh();\n                close();\n            }\n        );\n\n\n        return {\n            refresh,\n            close\n        };\n    }\n\n\n    const customSelectControllers =\n        Array.from(\n            app.querySelectorAll(\n                \".mx-custom-select\"\n            )\n        )\n            .map(setupCustomSelect)\n            .filter(Boolean);\n\n\n    document.addEventListener(\n        \"click\",\n        function (event) {\n\n            if (\n                event.target.closest(\n                    \".mx-custom-select\"\n                )\n            ) {\n                return;\n            }\n\n            customSelectControllers\n                .forEach(function (instance) {\n                    instance.close();\n                });\n        }\n    );\n\n\n    \/* =====================================================\n       CUSTOM CHECKBOX INTERACTION\n    ====================================================== *\/\n\n    app\n        .querySelectorAll(\n            \".mx-check\"\n        )\n        .forEach(function (check) {\n\n            const input =\n                check.querySelector(\n                    'input[type=\"checkbox\"]'\n                );\n\n            if (!input) {\n                return;\n            }\n\n            check.addEventListener(\n                \"click\",\n                function (event) {\n\n                    event.preventDefault();\n\n                    input.checked =\n                        !input.checked;\n\n                    input.dispatchEvent(\n                        new Event(\n                            \"change\",\n                            {\n                                bubbles: true\n                            }\n                        )\n                    );\n                }\n            );\n        });\n\n\n    \/* =====================================================\n       INITIAL LOAD\n    ====================================================== *\/\n\n\n    loadMasterRanking();\n\n})();\n(function () {\n    function mxAlignFilterSidebarTop() {\n        var app = document.getElementById('mx-ranking-app');\n        if (!app) return;\n\n        var content = app.querySelector('.mx-ranking-content');\n        var sidebar = app.querySelector('#mx-filter-panel');\n        var firstRow = app.querySelector('#mx-ranking-rows .mx-ranking-row');\n\n        if (!content || !sidebar || !firstRow) return;\n\n        if (window.innerWidth <= 991) {\n            sidebar.style.marginTop = '0px';\n            return;\n        }\n\n        var contentRect = content.getBoundingClientRect();\n        var firstRowRect = firstRow.getBoundingClientRect();\n        var offset = Math.max(0, Math.round(firstRowRect.top - contentRect.top));\n        sidebar.style.marginTop = offset + 'px';\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', mxAlignFilterSidebarTop);\n    } else {\n        mxAlignFilterSidebarTop();\n    }\n\n    window.addEventListener('load', mxAlignFilterSidebarTop);\n    window.addEventListener('resize', mxAlignFilterSidebarTop);\n\n    var rankingRows = document.getElementById('mx-ranking-rows');\n    if (rankingRows && 'MutationObserver' in window) {\n        var observer = new MutationObserver(function () {\n            mxAlignFilterSidebarTop();\n        });\n        observer.observe(rankingRows, { childList: true, subtree: true });\n    }\n\n    window.mxAlignFilterSidebarTop = mxAlignFilterSidebarTop;\n})();\n<\/script>\n\n\n<style>\n\n\/* =========================================================\n   BASE\n========================================================= *\/\n\n#mx-ranking-app {\n\n    width: 100%;\n\n    position: relative;\n\n    color: #F8FAFC;\n}\n\n\n\/* =========================================================\n   TABS\n========================================================= *\/\n\n.mx-rank-tabs {\n\n    display: grid;\n\n    grid-template-columns:\n        repeat(5, 1fr);\n\n    gap: 16px;\n\n    padding: 10px;\n\n    border:\n        1px solid #172333;\n\n    border-radius: 9px;\n}\n\n\n.mx-rank-tabs button {\n\n    min-height: 46px;\n\n    padding: 8px 12px;\n\n    border:\n        1px solid #16243A;\n\n    border-radius: 7px;\n\n    background:\n        transparent;\n\n    color: #FFFFFF;\n\n    font-size: 12px;\n\n    font-weight: 700;\n\n    cursor: pointer;\n\n    transition:\n        .2s ease;\n}\n\n\n.mx-rank-tabs button:hover {\n\n    border-color:\n        rgba(\n            52,\n            211,\n            153,\n            .45\n        );\n}\n\n\n.mx-rank-tabs button.active {\n\n    border-color:\n        #34D399;\n\n    background:\n        rgba(\n            52,\n            211,\n            153,\n            .045\n        );\n}\n\n\n\/* =========================================================\n   TOOLBAR\n========================================================= *\/\n\n.mx-rank-toolbar {\n\n    display: grid;\n\n    grid-template-columns:\n        150px\n        1fr\n        110px;\n\n    align-items: center;\n\n    gap: 16px;\n\n    margin:\n        12px 0 18px;\n}\n\n\n.mx-rank-toolbar select,\n.mx-filter-button {\n\n    height: 42px;\n\n    padding:\n        0 13px;\n\n    border:\n        1px solid #172333;\n\n    border-radius:\n        7px;\n\n    outline: none;\n\n    background:\n        #02060C;\n\n    color:\n        #E2E8F0;\n\n    font-size:\n        11px;\n}\n\n\n.mx-last-update {\n\n    text-align: center;\n\n    color:\n        #34D399;\n\n    font-size:\n        10px;\n\n    font-weight:\n        700;\n}\n\n\n.mx-filter-button {\n\n    cursor:\n        pointer;\n}\n\n\n\/* =========================================================\n   FILTER PANEL\n========================================================= *\/\n\n.mx-filter-panel {\n\n    display: none;\n\n    position: absolute;\n\n    top: 116px;\n\n    right: 0;\n\n    z-index: 9999;\n\n    width: 440px;\n\n    max-width:\n        100%;\n\n    padding: 18px;\n\n    border:\n        1px solid #1A2B40;\n\n    border-radius:\n        10px;\n\n    background:\n        #07101B;\n\n    box-shadow:\n        0 18px 50px\n        rgba(\n            0,\n            0,\n            0,\n            .55\n        );\n}\n\n\n.mx-filter-panel.open {\n\n    display:\n        block;\n}\n\n\n.mx-filter-grid {\n\n    display:\n        grid;\n\n    grid-template-columns:\n        repeat(2,1fr);\n\n    gap:\n        14px;\n}\n\n\n.mx-filter-grid label > span {\n\n    display:\n        block;\n\n    margin-bottom:\n        6px;\n\n    color:\n        #94A3B8;\n\n    font-size:\n        9px;\n}\n\n\n.mx-filter-grid input[type=\"text\"],\n.mx-filter-grid select {\n\n    width: 100%;\n\n    height: 38px;\n\n    padding:\n        0 10px;\n\n    border:\n        1px solid #1A2B40;\n\n    border-radius:\n        7px;\n\n    outline:\n        none;\n\n    background:\n        #02060C;\n\n    color:\n        #FFFFFF;\n\n    font-size:\n        10px;\n}\n\n\n.mx-check {\n\n    display:\n        flex;\n\n    align-items:\n        center;\n\n    gap:\n        8px;\n\n    padding-top:\n        20px;\n\n    cursor:\n        pointer;\n}\n\n\n.mx-check span {\n\n    margin:\n        0 !important;\n}\n\n\n.mx-filter-actions {\n\n    display:\n        flex;\n\n    justify-content:\n        flex-end;\n\n    gap:\n        10px;\n\n    margin-top:\n        18px;\n}\n\n\n.mx-filter-actions button {\n\n    min-width:\n        100px;\n\n    min-height:\n        36px;\n\n    padding:\n        7px 14px;\n\n    border:\n        1px solid #253B59;\n\n    border-radius:\n        7px;\n\n    background:\n        transparent;\n\n    color:\n        #CBD5E1;\n\n    cursor:\n        pointer;\n}\n\n\n.mx-filter-actions .primary {\n\n    color:\n        #02060C;\n\n    background:\n        #07DFE2;\n\n    border-color:\n        #07DFE2;\n\n    font-weight:\n        800;\n}\n\n\n\/* =========================================================\n   IMPORTANT:\n   SAME GRID FOR HEADER + ROW\n========================================================= *\/\n\n.mx-ranking-header,\n.mx-ranking-row {\n\n    display:\n        grid;\n\n    grid-template-columns:\n        58px\n        minmax(250px, 1.75fr)\n        95px\n        165px\n        135px\n        135px\n        90px;\n\n    align-items:\n        center;\n\n    column-gap:\n        14px;\n}\n\n\n\/* =========================================================\n   HEADER\n========================================================= *\/\n\n.mx-ranking-header {\n\n    min-height:\n        56px;\n\n    padding:\n        0 18px;\n\n    color:\n        #D5DEEB;\n\n    font-size:\n        10px;\n\n    text-align:\n        center;\n}\n\n\n.mx-ranking-header > div:nth-child(2) {\n\n    text-align:\n        left;\n}\n\n\n\/* =========================================================\n   ROW\n========================================================= *\/\n\n.mx-ranking-row {\n\n    min-height:\n        118px;\n\n    margin-bottom:\n        14px;\n\n    padding:\n        16px 18px;\n\n    border:\n        1px solid #172333;\n\n    border-radius:\n        12px;\n\n    background:\n        #080E17;\n\n    transition:\n        .2s ease;\n}\n\n\n.mx-ranking-row:hover {\n\n    border-color:\n        rgba(\n            7,\n            223,\n            226,\n            .22\n        );\n\n    background:\n        #09111C;\n}\n\n\n\/* =========================================================\n   RANK\n========================================================= *\/\n\n.mx-col-rank {\n\n    display:\n        flex;\n\n    justify-content:\n        center;\n}\n\n\n.mx-rank-circle {\n\n    width:\n        34px;\n\n    height:\n        34px;\n\n    display:\n        flex;\n\n    align-items:\n        center;\n\n    justify-content:\n        center;\n\n    border:\n        2px solid\n        #64748B;\n\n    border-radius:\n        50%;\n\n    color:\n        #94A3B8;\n\n    font-size:\n        13px;\n\n    font-weight:\n        800;\n}\n\n\n.mx-rank-circle.gold {\n\n    color:\n        #FFD84D;\n\n    border-color:\n        #FFD84D;\n\n    box-shadow:\n        0 0 7px\n        rgba(\n            255,\n            216,\n            77,\n            .45\n        ),\n        0 0 17px\n        rgba(\n            255,\n            216,\n            77,\n            .20\n        );\n}\n\n\n.mx-rank-circle.silver {\n\n    color:\n        #E8EDF3;\n\n    border-color:\n        #D9E1EA;\n}\n\n\n.mx-rank-circle.bronze {\n\n    color:\n        #F09A52;\n\n    border-color:\n        #D9823B;\n}\n\n\n\/* =========================================================\n   BROKER\n   Logo on the left + Name\/Verified\/Categories on the right\n========================================================= *\/\n\n.mx-col-broker {\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n    min-width: 0;\n}\n\n.mx-broker-layout {\n    width: 100%;\n\n    display: grid;\n\n    grid-template-columns:\n        108px\n        minmax(0, 1fr);\n\n    align-items: center;\n\n    column-gap: 14px;\n}\n\n.mx-broker-logo-wrap {\n    width: 108px;\n    height: 56px;\n\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n\n    flex-shrink: 0;\n}\n\n.mx-broker-logo {\n    width: 102px;\n    height: 48px;\n\n    display: block;\n\n    object-fit: contain;\n    object-position: left center;\n}\n\n.mx-broker-logo-placeholder {\n    width: 48px;\n    height: 48px;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    border: 1px solid #253B59;\n    border-radius: 8px;\n\n    color: #07DFE2;\n    background: rgba(7, 223, 226, .05);\n\n    font-size: 18px;\n    font-weight: 900;\n}\n\n.mx-broker-content {\n    min-width: 0;\n\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    justify-content: center;\n\n    gap: 6px;\n}\n\n.mx-broker-title-row {\n    min-width: 0;\n\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n\n    gap: 7px;\n}\n\n.mx-broker-name {\n    color: #F8FAFC;\n\n    font-size: 14px;\n    font-weight: 800;\n    line-height: 1;\n\n    white-space: nowrap;\n}\n\n.mx-broker-verified {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n\n    padding: 3px 6px;\n\n    border: 1px solid rgba(52, 211, 153, .22);\n    border-radius: 5px;\n\n    color: #34D399;\n    background: rgba(52, 211, 153, .08);\n\n    font-size: 7px;\n    font-weight: 800;\n    line-height: 1;\n\n    white-space: nowrap;\n}\n\n.mx-broker-features {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n\n    gap: 1px;\n\n    margin: 0 !important;\n    padding: 0 !important;\n\n    color: #64748B;\n\n    font-size: 9px;\n    line-height: 1.3;\n}\n\n.mx-broker-features span {\n    display: block;\n    margin: 0;\n    padding: 0;\n}\n\n\/* Rank circle and broker block stay vertically centered on the same row *\/\n.mx-col-rank,\n.mx-col-broker {\n    align-self: center;\n}\n\n.mx-col-rank {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n\n\/* =========================================================\n   SCORE\n========================================================= *\/\n\n.mx-col-score {\n\n    text-align:\n        center;\n}\n\n\n.mx-col-score strong {\n\n    color:\n        #07DFE2;\n\n    font-size:\n        17px;\n\n    font-weight:\n        900;\n}\n\n\n.mx-stars {\n\n    margin-top:\n        5px;\n\n    color:\n        #F5C542;\n\n    font-size:\n        11px;\n\n    letter-spacing:\n        1px;\n}\n\n\n\/* =========================================================\n   METRIC SCORE\n========================================================= *\/\n\n.mx-metric-score {\n\n    display:\n        block;\n\n    color:\n        #E2E8F0;\n\n    font-size:\n        11px;\n\n    font-weight:\n        800;\n\n    line-height:\n        1;\n}\n\n\n\/* =========================================================\n   REGULATION\n========================================================= *\/\n\n.mx-col-regulation {\n\n    display:\n        flex;\n\n    flex-direction:\n        column;\n\n    align-items:\n        center;\n\n    justify-content:\n        center;\n\n    gap:\n        7px;\n\n    text-align:\n        center;\n}\n\n\n.mx-regulated {\n\n    display:\n        inline-flex;\n\n    align-items:\n        center;\n\n    justify-content:\n        center;\n\n    padding:\n        5px 9px;\n\n    border-radius:\n        6px;\n\n    color:\n        #FFFFFF;\n\n    background:\n        #34D399;\n\n    box-shadow:\n        0 0 10px\n        rgba(\n            52,\n            211,\n            153,\n            .45\n        );\n\n    font-size:\n        9px;\n\n    font-weight:\n        800;\n}\n\n\n.mx-regulation-na {\n\n    color:\n        #64748B;\n\n    font-size:\n        9px;\n}\n\n\n.mx-regulator-chips {\n\n    display:\n        flex;\n\n    flex-wrap:\n        wrap;\n\n    justify-content:\n        center;\n\n    gap:\n        4px;\n\n    max-width:\n        150px;\n}\n\n\n.mx-regulator-chip {\n\n    display:\n        inline-flex;\n\n    align-items:\n        center;\n\n    justify-content:\n        center;\n\n    min-height:\n        20px;\n\n    padding:\n        3px 6px;\n\n    border:\n        1px solid\n        rgba(\n            7,\n            223,\n            226,\n            .25\n        );\n\n    border-radius:\n        5px;\n\n    color:\n        #67E8F9;\n\n    background:\n        rgba(\n            7,\n            223,\n            226,\n            .06\n        );\n\n    font-size:\n        6.5px;\n\n    font-weight:\n        700;\n\n    white-space:\n        nowrap;\n}\n\n\n.mx-regulator-empty {\n\n    color:\n        #475569;\n\n    font-size:\n        9px;\n}\n\n\n\/* =========================================================\n   TRADING + POPULARITY\n========================================================= *\/\n\n.mx-col-trading,\n.mx-col-popularity {\n\n    display:\n        flex;\n\n    flex-direction:\n        column;\n\n    align-items:\n        center;\n\n    justify-content:\n        center;\n\n    gap:\n        8px;\n\n    text-align:\n        center;\n}\n\n\n.mx-meter {\n\n    width:\n        92px;\n\n    height:\n        5px;\n\n    overflow:\n        hidden;\n\n    border-radius:\n        999px;\n\n    background:\n        #172333;\n}\n\n\n.mx-meter span {\n\n    display:\n        block;\n\n    height:\n        100%;\n\n    border-radius:\n        inherit;\n}\n\n\n.mx-meter.green span {\n\n    background:\n        #34D399;\n}\n\n\n.mx-meter.blue span {\n\n    background:\n        #3B82F6;\n}\n\n\n.mx-quality {\n\n    display:\n        inline-flex;\n\n    align-items:\n        center;\n\n    justify-content:\n        center;\n\n    min-height:\n        26px;\n\n    padding:\n        5px 10px;\n\n    border-radius:\n        7px;\n\n    color:\n        #FFFFFF;\n\n    font-size:\n        9px;\n\n    font-weight:\n        650;\n}\n\n\n.mx-quality.green {\n\n    background:\n        rgba(\n            16,\n            185,\n            129,\n            .08\n        );\n\n    border:\n        1px solid\n        rgba(\n            16,\n            185,\n            129,\n            .20\n        );\n}\n\n\n.mx-quality.blue {\n\n    background:\n        rgba(\n            56,\n            189,\n            248,\n            .08\n        );\n\n    border:\n        1px solid\n        rgba(\n            56,\n            189,\n            248,\n            .25\n        );\n}\n\n\n\/* =========================================================\n   SOURCE-NATIVE LABEL\n========================================================= *\/\n\n.mx-source-native-note {\n\n    display:\n        inline-flex;\n\n    align-items:\n        center;\n\n    justify-content:\n        center;\n\n    min-height:\n        18px;\n\n    padding:\n        3px 6px;\n\n    border:\n        1px solid\n        rgba(\n            148,\n            163,\n            184,\n            .16\n        );\n\n    border-radius:\n        5px;\n\n    color:\n        #94A3B8;\n\n    background:\n        rgba(\n            15,\n            23,\n            42,\n            .35\n        );\n\n    font-size:\n        8px;\n\n    font-weight:\n        700;\n\n    line-height:\n        1;\n\n    white-space:\n        nowrap;\n}\n\n\n\/* =========================================================\n   ACTION\n========================================================= *\/\n\n.mx-col-action {\n\n    text-align:\n        center;\n}\n\n\n.mx-col-action a {\n\n    display:\n        inline-flex;\n\n    align-items:\n        center;\n\n    justify-content:\n        center;\n\n    min-width:\n        68px;\n\n    min-height:\n        32px;\n\n    border:\n        1px solid\n        #253B59;\n\n    border-radius:\n        7px;\n\n    color:\n        #CBD5E1;\n\n    text-decoration:\n        none;\n\n    font-size:\n        10px;\n\n    cursor:\n        pointer;\n}\n\n\n.mx-col-action a:hover {\n\n    border-color:\n        #07DFE2;\n\n    color:\n        #FFFFFF;\n}\n\n\n\/* =========================================================\n   LOADING \/ EMPTY\n========================================================= *\/\n\n.mx-ranking-state {\n\n    padding:\n        24px;\n\n    border:\n        1px solid\n        #172333;\n\n    border-radius:\n        10px;\n\n    background:\n        #080E17;\n\n    color:\n        #64748B;\n\n    text-align:\n        center;\n\n    font-size:\n        11px;\n}\n\n\n\/* =========================================================\n   MEDIUM DESKTOP \/ TABLET\n========================================================= *\/\n\n@media (max-width: 1250px) {\n\n    .mx-ranking-header,\n    .mx-ranking-row {\n\n        grid-template-columns:\n            48px\n            minmax(200px,1.5fr)\n            75px\n            135px\n            110px\n            110px\n            75px;\n\n        column-gap:\n            8px;\n    }\n\n\n    .mx-broker-logo {\n\n        width:\n            80px;\n    }\n\n\n    .mx-meter {\n\n        width:\n            78px;\n    }\n\n}\n\n\n\/* =========================================================\n   MOBILE\n========================================================= *\/\n\n@media (max-width: 767px) {\n\n    .mx-rank-tabs {\n\n        grid-template-columns:\n            repeat(2,1fr);\n\n        gap:\n            8px;\n    }\n\n\n    .mx-rank-toolbar {\n\n        grid-template-columns:\n            1fr 90px;\n    }\n\n\n    .mx-last-update {\n\n        display:\n            none;\n    }\n\n\n    .mx-filter-panel {\n\n        width:\n            calc(\n                100vw - 30px\n            );\n\n        right:\n            0;\n    }\n\n\n    .mx-filter-grid {\n\n        grid-template-columns:\n            1fr;\n    }\n\n\n    .mx-ranking-header,\n    .mx-ranking-row {\n\n        grid-template-columns:\n            42px\n            minmax(115px,1fr)\n            65px\n            78px;\n\n        column-gap:\n            7px;\n    }\n\n\n    .mx-ranking-header\n    > div:nth-child(5),\n\n    .mx-ranking-header\n    > div:nth-child(6),\n\n    .mx-ranking-header\n    > div:nth-child(7),\n\n    .mx-col-trading,\n\n    .mx-col-popularity,\n\n    .mx-col-action {\n\n        display:\n            none;\n    }\n\n\n    .mx-ranking-row {\n\n        min-height:\n            90px;\n\n        padding:\n            12px 10px;\n    }\n\n\n    .mx-broker-layout {\n        grid-template-columns:\n            68px\n            minmax(0, 1fr);\n\n        column-gap:\n            8px;\n    }\n\n\n    .mx-broker-logo-wrap {\n        width:\n            68px;\n\n        height:\n            34px;\n    }\n\n\n    .mx-broker-logo {\n        width:\n            64px;\n\n        height:\n            30px;\n    }\n\n\n    .mx-broker-name {\n        font-size:\n            10px;\n    }\n\n\n    .mx-broker-content {\n        gap:\n            4px;\n    }\n\n\n    .mx-broker-features {\n        font-size:\n            7px;\n    }\n\n\n    .mx-broker-verified {\n\n        font-size:\n            6px;\n\n        padding:\n            2px 4px;\n    }\n\n\n    .mx-regulator-chips {\n\n        max-width:\n            75px;\n    }\n\n\n    .mx-regulator-chip {\n\n        font-size:\n            5.5px;\n\n        padding:\n            2px 4px;\n    }\n\n}\n\n\n\n\n\n\/* =========================================================\n   MARKUNOX FINAL GRID FIX\n   Uses the actual widget width, not the browser viewport.\n========================================================= *\/\n\n#mx-ranking-app {\n    width: 100%;\n    max-width: 100%;\n    container-type: inline-size;\n    overflow: visible;\n\n    --mx-ranking-grid:\n        46px\n        minmax(210px, 1.55fr)\n        minmax(72px, .72fr)\n        minmax(108px, .95fr)\n        minmax(102px, .88fr)\n        minmax(102px, .88fr)\n        minmax(72px, .68fr);\n\n    --mx-ranking-gap: 8px;\n}\n\n#mx-ranking-app,\n#mx-ranking-app * {\n    box-sizing: border-box;\n}\n\n\/* Header and every dynamic row use exactly the same tracks. *\/\n#mx-ranking-app .mx-ranking-header,\n#mx-ranking-app .mx-ranking-row {\n    width: 100%;\n    max-width: 100%;\n\n    grid-template-columns: var(--mx-ranking-grid) !important;\n    column-gap: var(--mx-ranking-gap) !important;\n\n    align-items: center;\n}\n\n#mx-ranking-app .mx-ranking-row {\n    overflow: hidden;\n}\n\n\/* Broker *\/\n#mx-ranking-app .mx-col-broker,\n#mx-ranking-app .mx-broker-layout,\n#mx-ranking-app .mx-broker-content,\n#mx-ranking-app .mx-broker-title-row {\n    min-width: 0;\n}\n\n#mx-ranking-app .mx-broker-layout {\n    width: 100%;\n    max-width: 100%;\n\n    grid-template-columns:\n        96px\n        minmax(0, 1fr) !important;\n\n    gap: 10px !important;\n    align-items: center;\n}\n\n#mx-ranking-app .mx-broker-logo-wrap {\n    width: 96px;\n    max-width: 96px;\n}\n\n#mx-ranking-app .mx-broker-logo {\n    width: 92px;\n    max-width: 92px;\n}\n\n\/* Keep Score visually closer to Broker. *\/\n#mx-ranking-app .mx-col-score {\n    min-width: 0;\n    justify-self: center;\n}\n\n\/* Details must always stay inside the card. *\/\n#mx-ranking-app .mx-col-action {\n    width: 100%;\n    min-width: 0;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 5px;\n}\n\n#mx-ranking-app .mx-col-action a {\n    width: 66px;\n    max-width: 100%;\n    min-width: 0;\n\n    padding: 7px 6px;\n    margin: 0;\n\n    white-space: nowrap;\n}\n\n#mx-ranking-app .mx-col-action .mx-action-compare {\n    color: #001315;\n    background: #07dfe2;\n    border-color: #07dfe2;\n}\n\n#mx-ranking-app .mx-col-action .mx-action-compare:hover {\n    color: #001315;\n    background: #07dfe2;\n    border-color: #07dfe2;\n}\n\n\/* Four regulation positions, 2 \u00d7 2. *\/\n#mx-ranking-app .mx-regulator-chips {\n    width: 104px;\n    max-width: 104px;\n\n    display: grid !important;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n\n    gap: 4px;\n}\n\n#mx-ranking-app .mx-regulator-chip {\n    width: 100%;\n    min-width: 0;\n\n    padding: 3px 4px;\n\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n\/* Ranking tabs:\n   transparent on normal \/ active \/ hover.\n   Only the border becomes MARKUNOX green. *\/\n#mx-ranking-app .mx-rank-tabs button,\n#mx-ranking-app .mx-rank-tabs button.active,\n#mx-ranking-app .mx-rank-tabs button:hover,\n#mx-ranking-app .mx-rank-tabs button:focus,\n#mx-ranking-app .mx-rank-tabs button:focus-visible {\n    background: transparent !important;\n    box-shadow: none !important;\n}\n\n#mx-ranking-app .mx-rank-tabs button.active,\n#mx-ranking-app .mx-rank-tabs button:hover,\n#mx-ranking-app .mx-rank-tabs button:focus,\n#mx-ranking-app .mx-rank-tabs button:focus-visible {\n    border-color: #34D399 !important;\n}\n\n\/* =========================================================\n   IMPORTANT:\n   Elementor can show this widget at ~800\u2013900px wide even on\n   a large desktop viewport. Container queries handle that.\n========================================================= *\/\n\n@container (max-width: 1000px) {\n\n    #mx-ranking-app {\n        --mx-ranking-grid:\n            42px\n            minmax(195px, 1.5fr)\n            66px\n            96px\n            88px\n            88px\n            60px;\n\n        --mx-ranking-gap: 6px;\n    }\n\n    #mx-ranking-app .mx-ranking-header,\n    #mx-ranking-app .mx-ranking-row {\n        padding-left: 10px;\n        padding-right: 10px;\n    }\n\n    #mx-ranking-app .mx-broker-layout {\n        grid-template-columns:\n            82px\n            minmax(0, 1fr) !important;\n\n        gap: 7px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 82px;\n        max-width: 82px;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        width: 78px;\n        max-width: 78px;\n    }\n\n    #mx-ranking-app .mx-broker-name {\n        font-size: 11px;\n    }\n\n    #mx-ranking-app .mx-broker-features {\n        font-size: 8px;\n    }\n\n    #mx-ranking-app .mx-regulator-chips {\n        width: 90px;\n        max-width: 90px;\n    }\n\n    #mx-ranking-app .mx-meter {\n        width: 76px;\n    }\n\n    #mx-ranking-app .mx-col-action a {\n        width: 56px;\n        font-size: 8px;\n        padding-left: 4px;\n        padding-right: 4px;\n    }\n}\n\n\/* =========================================================\n   Narrow widget \/ mobile\n========================================================= *\/\n\n@container (max-width: 720px) {\n\n    #mx-ranking-app {\n        --mx-ranking-grid:\n            38px\n            minmax(128px, 1fr)\n            58px\n            72px;\n\n        --mx-ranking-gap: 5px;\n    }\n\n    #mx-ranking-app .mx-ranking-header > div:nth-child(5),\n    #mx-ranking-app .mx-ranking-header > div:nth-child(6),\n    #mx-ranking-app .mx-ranking-header > div:nth-child(7),\n    #mx-ranking-app .mx-col-trading,\n    #mx-ranking-app .mx-col-popularity,\n    #mx-ranking-app .mx-col-action {\n        display: none !important;\n    }\n\n    #mx-ranking-app .mx-broker-layout {\n        grid-template-columns:\n            58px\n            minmax(0, 1fr) !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 58px;\n        max-width: 58px;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        width: 55px;\n        max-width: 55px;\n        height: 28px;\n    }\n\n    #mx-ranking-app .mx-regulator-chips {\n        width: 68px;\n        max-width: 68px;\n        grid-template-columns: 1fr;\n    }\n}\n\n\n\n\/* =========================================================\n   FINAL DESKTOP ALIGNMENT FIX\n========================================================= *\/\n\n@media (min-width: 1251px) {\n\n    #mx-ranking-app .mx-ranking-header,\n    #mx-ranking-app .mx-ranking-row {\n\n        grid-template-columns:\n            5%\n            18%\n            11%\n            18%\n            17%\n            16%\n            9% !important;\n\n        column-gap: 1% !important;\n    }\n\n\n    \/* Header labels centered exactly on their columns *\/\n\n    #mx-ranking-app .mx-ranking-header > div {\n        text-align: center !important;\n        justify-self: center !important;\n    }\n\n\n    \/* Broker content stays safely inside its column *\/\n\n    #mx-ranking-app .mx-col-broker {\n        min-width: 0;\n        overflow: hidden;\n    }\n\n\n    #mx-ranking-app .mx-broker-layout {\n\n        grid-template-columns:\n            92px\n            minmax(0, 1fr) !important;\n\n        gap: 10px !important;\n    }\n\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 92px !important;\n        max-width: 92px !important;\n    }\n\n\n    #mx-ranking-app .mx-broker-logo {\n        width: 88px !important;\n        max-width: 88px !important;\n    }\n\n}\n    #mx-ranking-app .mx-broker-layout {\n        grid-template-columns:\n            92px\n            minmax(0, 1fr) !important;\n\n        gap: 9px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 92px !important;\n        max-width: 92px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        width: 88px !important;\n        max-width: 88px !important;\n    }\n\n    #mx-ranking-app .mx-col-score,\n    #mx-ranking-app .mx-col-regulation,\n    #mx-ranking-app .mx-col-trading,\n    #mx-ranking-app .mx-col-popularity,\n    #mx-ranking-app .mx-col-action {\n        justify-self: stretch;\n        width: 100%;\n    }\n\n    #mx-ranking-app .mx-col-action a {\n        width: 72px !important;\n        max-width: 100% !important;\n    }\n}\n\n\/* =========================================\n   FINAL BROKER NAME + VERIFIED FIX\n========================================= *\/\n\n@media (min-width: 1251px) {\n\n    #mx-ranking-app .mx-col-broker {\n        overflow: visible !important;\n    }\n\n    #mx-ranking-app .mx-broker-layout {\n        grid-template-columns:\n            70px\n            minmax(0, 1fr) !important;\n\n        gap: 6px !important;\n\n        overflow: visible !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 70px !important;\n        max-width: 70px !important;\n\n        overflow: visible !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        width: 68px !important;\n        max-width: 68px !important;\n        height: 42px !important;\n    }\n\n    #mx-ranking-app .mx-broker-content {\n        min-width: 0 !important;\n        overflow: visible !important;\n    }\n\n    #mx-ranking-app .mx-broker-title-row {\n        display: flex !important;\n        align-items: center !important;\n\n        width: max-content !important;\n        max-width: none !important;\n\n        gap: 5px !important;\n\n        white-space: nowrap !important;\n        overflow: visible !important;\n    }\n\n    #mx-ranking-app .mx-broker-name {\n        flex: none !important;\n\n        font-size: 13px !important;\n\n        white-space: nowrap !important;\n    }\n\n    #mx-ranking-app .mx-broker-verified {\n        flex: none !important;\n\n        width: auto !important;\n        max-width: none !important;\n\n        padding: 3px 5px !important;\n\n        font-size: 6px !important;\n        line-height: 1 !important;\n\n        white-space: nowrap !important;\n        overflow: visible !important;\n    }\n}\n\n\n\n\n\n\n\/* =========================================================\n   PERFORMANCE + SKELETON\n========================================================= *\/\n\n#mx-ranking-app .mx-ranking-row {\n    content-visibility: auto;\n    contain-intrinsic-size: 118px;\n}\n\n#mx-ranking-app .mx-ranking-skeleton {\n    pointer-events: none;\n    user-select: none;\n}\n\n#mx-ranking-app .mx-ranking-skeleton,\n#mx-ranking-app .mx-ranking-skeleton * {\n    overflow: hidden;\n}\n\n#mx-ranking-app .mx-skeleton-circle,\n#mx-ranking-app .mx-skeleton-logo,\n#mx-ranking-app .mx-skeleton-line,\n#mx-ranking-app .mx-skeleton-button {\n    display: block;\n    position: relative;\n    background: #111B28;\n    background-image:\n        linear-gradient(\n            90deg,\n            rgba(255,255,255,0) 0%,\n            rgba(255,255,255,.055) 50%,\n            rgba(255,255,255,0) 100%\n        );\n    background-size: 220% 100%;\n    animation: mxRankingSkeleton 1.35s linear infinite;\n}\n\n#mx-ranking-app .mx-skeleton-circle {\n    width: 34px;\n    height: 34px;\n    border-radius: 50%;\n}\n\n#mx-ranking-app .mx-skeleton-broker {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    min-width: 0;\n}\n\n#mx-ranking-app .mx-skeleton-logo {\n    width: 68px;\n    height: 38px;\n    border-radius: 7px;\n    flex: 0 0 auto;\n}\n\n#mx-ranking-app .mx-skeleton-lines {\n    width: 100%;\n    max-width: 110px;\n    display: flex;\n    flex-direction: column;\n    gap: 8px;\n}\n\n#mx-ranking-app .mx-skeleton-line {\n    height: 8px;\n    border-radius: 999px;\n}\n\n#mx-ranking-app .mx-skeleton-line.wide {\n    width: 88px;\n}\n\n#mx-ranking-app .mx-skeleton-line.medium {\n    width: 52px;\n}\n\n#mx-ranking-app .mx-skeleton-line.short {\n    width: 36px;\n}\n\n#mx-ranking-app .mx-skeleton-line.center {\n    margin-left: auto;\n    margin-right: auto;\n}\n\n#mx-ranking-app .mx-skeleton-button {\n    width: 58px;\n    height: 28px;\n    margin: 0 auto;\n    border-radius: 7px;\n}\n\n@keyframes mxRankingSkeleton {\n    0% {\n        background-position: 200% 0;\n    }\n\n    100% {\n        background-position: -20% 0;\n    }\n}\n\n@media (prefers-reduced-motion: reduce) {\n    #mx-ranking-app .mx-skeleton-circle,\n    #mx-ranking-app .mx-skeleton-logo,\n    #mx-ranking-app .mx-skeleton-line,\n    #mx-ranking-app .mx-skeleton-button {\n        animation: none;\n    }\n}\n\n\n\n\/* =========================================================\n   READABILITY UPGRADE\n========================================================= *\/\n\n#mx-ranking-app {\n    font-size: 13px;\n}\n\n#mx-ranking-app .mx-rank-tabs button {\n    font-size: 14px !important;\n    font-weight: 800 !important;\n    min-height: 50px;\n}\n\n#mx-ranking-app .mx-rank-toolbar select,\n#mx-ranking-app .mx-filter-button {\n    font-size: 13px !important;\n    font-weight: 700;\n}\n\n#mx-ranking-app .mx-last-update {\n    font-size: 12px !important;\n}\n\n#mx-ranking-app .mx-ranking-header {\n    font-size: 12px !important;\n    font-weight: 800;\n    letter-spacing: .15px;\n}\n\n#mx-ranking-app .mx-broker-name {\n    font-size: 15px !important;\n    font-weight: 900 !important;\n    line-height: 1.15 !important;\n}\n\n#mx-ranking-app .mx-broker-verified {\n    font-size: 8px !important;\n    font-weight: 900 !important;\n    padding: 4px 6px !important;\n}\n\n#mx-ranking-app .mx-broker-features {\n    font-size: 10px !important;\n    line-height: 1.45 !important;\n}\n\n#mx-ranking-app .mx-col-score strong {\n    font-size: 19px !important;\n}\n\n#mx-ranking-app .mx-stars {\n    font-size: 12px !important;\n}\n\n#mx-ranking-app .mx-metric-score {\n    font-size: 13px !important;\n    line-height: 1.15 !important;\n}\n\n#mx-ranking-app .mx-regulated,\n#mx-ranking-app .mx-regulation-na {\n    font-size: 10px !important;\n    font-weight: 900 !important;\n}\n\n#mx-ranking-app .mx-regulator-chip {\n    font-size: 8px !important;\n    font-weight: 800 !important;\n    min-height: 22px;\n}\n\n#mx-ranking-app .mx-quality {\n    font-size: 10px !important;\n    font-weight: 800 !important;\n}\n\n#mx-ranking-app .mx-source-native-note {\n    font-size: 9px !important;\n    font-weight: 800 !important;\n}\n\n#mx-ranking-app .mx-col-action a {\n    font-size: 11px !important;\n    font-weight: 800 !important;\n}\n\n#mx-ranking-app .mx-ranking-state {\n    font-size: 13px !important;\n}\n\n#mx-ranking-app .mx-filter-grid label > span {\n    font-size: 11px !important;\n    font-weight: 700;\n}\n\n#mx-ranking-app .mx-filter-grid input[type=\"text\"],\n#mx-ranking-app .mx-filter-grid select,\n#mx-ranking-app .mx-filter-actions button {\n    font-size: 12px !important;\n}\n\n@container (max-width: 1000px) {\n    #mx-ranking-app .mx-broker-name {\n        font-size: 13px !important;\n    }\n\n    #mx-ranking-app .mx-broker-features {\n        font-size: 9px !important;\n    }\n\n    #mx-ranking-app .mx-ranking-header {\n        font-size: 11px !important;\n    }\n\n    #mx-ranking-app .mx-regulator-chip {\n        font-size: 7px !important;\n    }\n}\n\n@container (max-width: 720px) {\n    #mx-ranking-app .mx-rank-tabs button {\n        font-size: 12px !important;\n    }\n\n    #mx-ranking-app .mx-broker-name {\n        font-size: 12px !important;\n    }\n\n    #mx-ranking-app .mx-broker-features {\n        font-size: 8px !important;\n    }\n\n    #mx-ranking-app .mx-col-score strong {\n        font-size: 16px !important;\n    }\n\n    #mx-ranking-app .mx-metric-score {\n        font-size: 11px !important;\n    }\n\n    #mx-ranking-app .mx-ranking-header {\n        font-size: 10px !important;\n    }\n}\n\n\n\n\/* =========================================================\n   CATEGORY + FILTER HOVER\n========================================================= *\/\n\n#mx-ranking-app #mx-rank-category,\n#mx-ranking-app #mx-filter-toggle {\n    transition:\n        background-color .18s ease,\n        border-color .18s ease,\n        color .18s ease;\n}\n\n#mx-ranking-app #mx-rank-category:hover,\n#mx-ranking-app #mx-filter-toggle:hover {\n    background: #07DFE2 !important;\n    border-color: #07DFE2 !important;\n    color: #02060C !important;\n}\n\n#mx-ranking-app #mx-filter-toggle:focus,\n#mx-ranking-app #mx-filter-toggle:focus-visible,\n#mx-ranking-app #mx-rank-category:focus {\n    border-color: #07DFE2 !important;\n}\n\n\n\n\/* =========================================================\n   CATEGORY DROPDOWN FINAL COLORS\n========================================================= *\/\n\n#mx-ranking-app #mx-rank-category {\n    background: #02060C !important;\n    color: #E2E8F0 !important;\n    border-color: #172333 !important;\n}\n\n#mx-ranking-app #mx-rank-category:hover {\n    background: #02060C !important;\n    color: #E2E8F0 !important;\n    border-color: #07DFE2 !important;\n}\n\n#mx-ranking-app #mx-rank-category option {\n    background: #02060C !important;\n    color: #E2E8F0 !important;\n}\n\n#mx-ranking-app #mx-rank-category option:hover,\n#mx-ranking-app #mx-rank-category option:focus,\n#mx-ranking-app #mx-rank-category option:checked {\n    background: #07DFE2 !important;\n    color: #02060C !important;\n}\n\n#mx-ranking-app #mx-filter-toggle {\n    background: #02060C !important;\n    color: #E2E8F0 !important;\n}\n\n#mx-ranking-app #mx-filter-toggle:hover {\n    background: #07DFE2 !important;\n    border-color: #07DFE2 !important;\n    color: #02060C !important;\n}\n\n\n\n\/* =========================================================\n   CUSTOM CATEGORY DROPDOWN\n   No native blue selection state\n========================================================= *\/\n\n#mx-ranking-app .mx-category-custom {\n    position: relative;\n    width: 150px;\n}\n\n#mx-ranking-app #mx-rank-category {\n    position: absolute !important;\n    width: 1px !important;\n    height: 1px !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n}\n\n#mx-ranking-app .mx-category-button {\n    width: 100%;\n    height: 42px;\n    padding: 0 13px;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 10px;\n    border: 1px solid #172333;\n    border-radius: 7px;\n    background: #02060C;\n    color: #E2E8F0;\n    font-size: 13px;\n    font-weight: 700;\n    cursor: pointer;\n    transition:\n        border-color .18s ease,\n        background-color .18s ease,\n        color .18s ease;\n}\n\n#mx-ranking-app .mx-category-button:hover,\n#mx-ranking-app .mx-category-button:focus,\n#mx-ranking-app .mx-category-button:focus-visible {\n    background: #02060C !important;\n    color: #E2E8F0 !important;\n    border-color: #07DFE2 !important;\n    outline: none;\n}\n\n#mx-ranking-app .mx-category-chevron {\n    color: #E2E8F0;\n    font-size: 15px;\n    line-height: 1;\n}\n\n#mx-ranking-app .mx-category-menu {\n    display: none;\n    position: absolute;\n    top: calc(100% + 1px);\n    left: 0;\n    z-index: 10020;\n    width: 100%;\n    max-height: 360px;\n    overflow-y: auto;\n    padding: 0;\n    border: 1px solid #253B59;\n    border-radius: 0;\n    background: #02060C;\n    box-shadow: 0 16px 40px rgba(0,0,0,.45);\n}\n\n#mx-ranking-app .mx-category-menu.open {\n    display: block;\n}\n\n#mx-ranking-app .mx-category-option {\n    width: 100%;\n    min-height: 36px;\n    padding: 8px 16px;\n    display: block;\n    border: 0;\n    border-radius: 0;\n    background: #02060C !important;\n    color: #FFFFFF !important;\n    text-align: left;\n    font-size: 12px;\n    font-weight: 500;\n    cursor: pointer;\n    box-shadow: none !important;\n    outline: none !important;\n}\n\n#mx-ranking-app .mx-category-option:hover,\n#mx-ranking-app .mx-category-option:focus,\n#mx-ranking-app .mx-category-option:focus-visible,\n#mx-ranking-app .mx-category-option.active {\n    background: #07DFE2 !important;\n    color: #02060C !important;\n}\n\n#mx-ranking-app .mx-category-menu::-webkit-scrollbar {\n    width: 6px;\n}\n\n#mx-ranking-app .mx-category-menu::-webkit-scrollbar-track {\n    background: #02060C;\n}\n\n#mx-ranking-app .mx-category-menu::-webkit-scrollbar-thumb {\n    background: #172333;\n    border-radius: 999px;\n}\n\n@container (max-width: 720px) {\n    #mx-ranking-app .mx-category-custom {\n        width: 100%;\n    }\n}\n\n\n\n\/* =========================================================\n   REMOVE BLUE INTERACTION STATES\n========================================================= *\/\n\n#mx-ranking-app {\n    --mx-accent: #07DFE2;\n    --mx-dark: #02060C;\n}\n\n#mx-ranking-app button,\n#mx-ranking-app select,\n#mx-ranking-app input {\n    -webkit-tap-highlight-color: transparent;\n}\n\n#mx-ranking-app input[type=\"checkbox\"] {\n    accent-color: #07DFE2;\n}\n\n\/* Reset is no longer blue. *\/\n#mx-ranking-app #mx-filter-reset {\n    background: #02060C !important;\n    border-color: #253B59 !important;\n    color: #CBD5E1 !important;\n}\n\n#mx-ranking-app #mx-filter-reset:hover,\n#mx-ranking-app #mx-filter-reset:focus,\n#mx-ranking-app #mx-filter-reset:focus-visible,\n#mx-ranking-app #mx-filter-reset:active {\n    background: #07DFE2 !important;\n    border-color: #07DFE2 !important;\n    color: #02060C !important;\n    outline: none !important;\n    box-shadow: none !important;\n}\n\n\/* Apply keeps the MARKUNOX turquoise, never browser blue. *\/\n#mx-ranking-app #mx-filter-apply,\n#mx-ranking-app #mx-filter-apply:hover,\n#mx-ranking-app #mx-filter-apply:focus,\n#mx-ranking-app #mx-filter-apply:focus-visible,\n#mx-ranking-app #mx-filter-apply:active {\n    background: #07DFE2 !important;\n    border-color: #07DFE2 !important;\n    color: #02060C !important;\n    outline: none !important;\n    box-shadow: none !important;\n}\n\n\/* Hidden native selects remove OS\/browser blue dropdown states. *\/\n#mx-ranking-app .mx-native-hidden-select {\n    position: absolute !important;\n    width: 1px !important;\n    height: 1px !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n}\n\n\/* Country + Score custom dropdowns. *\/\n#mx-ranking-app .mx-custom-select {\n    position: relative;\n    width: 100%;\n}\n\n#mx-ranking-app .mx-custom-select-button {\n    width: 100%;\n    height: 38px;\n    padding: 0 10px;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 8px;\n    border: 1px solid #1A2B40;\n    border-radius: 7px;\n    background: #02060C !important;\n    color: #FFFFFF !important;\n    font-size: 12px;\n    cursor: pointer;\n    outline: none !important;\n    box-shadow: none !important;\n}\n\n#mx-ranking-app .mx-custom-select-button:hover,\n#mx-ranking-app .mx-custom-select-button:focus,\n#mx-ranking-app .mx-custom-select-button:focus-visible,\n#mx-ranking-app .mx-custom-select-button:active {\n    background: #02060C !important;\n    border-color: #07DFE2 !important;\n    color: #FFFFFF !important;\n    outline: none !important;\n    box-shadow: none !important;\n}\n\n#mx-ranking-app .mx-custom-select-menu {\n    display: none;\n    position: absolute;\n    top: calc(100% + 2px);\n    left: 0;\n    z-index: 10030;\n    width: 100%;\n    max-height: 260px;\n    overflow-y: auto;\n    border: 1px solid #253B59;\n    background: #02060C;\n    box-shadow: 0 16px 40px rgba(0,0,0,.45);\n}\n\n#mx-ranking-app .mx-custom-select-menu.open {\n    display: block;\n}\n\n#mx-ranking-app .mx-custom-select-option {\n    width: 100%;\n    min-height: 36px;\n    padding: 8px 12px;\n    border: 0;\n    border-radius: 0;\n    background: #02060C !important;\n    color: #FFFFFF !important;\n    text-align: left;\n    font-size: 12px;\n    cursor: pointer;\n    outline: none !important;\n    box-shadow: none !important;\n}\n\n#mx-ranking-app .mx-custom-select-option:hover,\n#mx-ranking-app .mx-custom-select-option:focus,\n#mx-ranking-app .mx-custom-select-option:focus-visible,\n#mx-ranking-app .mx-custom-select-option.active {\n    background: #07DFE2 !important;\n    color: #02060C !important;\n}\n\n\/* Remove any blue focus\/background from category custom dropdown too. *\/\n#mx-ranking-app .mx-category-option,\n#mx-ranking-app .mx-category-option:active {\n    box-shadow: none !important;\n    outline: none !important;\n}\n\n#mx-ranking-app .mx-category-option:hover,\n#mx-ranking-app .mx-category-option:focus,\n#mx-ranking-app .mx-category-option:focus-visible,\n#mx-ranking-app .mx-category-option.active {\n    background: #07DFE2 !important;\n    color: #02060C !important;\n}\n\n\n\n\/* =========================================================\n   CUSTOM CHECKBOXES\n========================================================= *\/\n\n#mx-ranking-app .mx-check {\n    position: relative;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    cursor: pointer;\n    user-select: none;\n}\n\n#mx-ranking-app .mx-check input[type=\"checkbox\"] {\n    position: absolute !important;\n    opacity: 0 !important;\n    width: 1px !important;\n    height: 1px !important;\n    pointer-events: none !important;\n}\n\n#mx-ranking-app .mx-check-box {\n    width: 16px;\n    height: 16px;\n    flex: 0 0 16px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    border: 1px solid #64748B;\n    border-radius: 3px;\n    background: #02060C;\n    transition:\n        background-color .15s ease,\n        border-color .15s ease,\n        box-shadow .15s ease;\n}\n\n#mx-ranking-app .mx-check-box::after {\n    content: \"\u2713\";\n    display: block;\n    color: #02060C;\n    font-size: 12px;\n    font-weight: 900;\n    line-height: 1;\n    opacity: 0;\n    transform: scale(.7);\n    transition:\n        opacity .12s ease,\n        transform .12s ease;\n}\n\n#mx-ranking-app .mx-check input[type=\"checkbox\"]:checked + .mx-check-box {\n    background: #07DFE2;\n    border-color: #07DFE2;\n    box-shadow: 0 0 0 2px rgba(7,223,226,.08);\n}\n\n#mx-ranking-app .mx-check input[type=\"checkbox\"]:checked + .mx-check-box::after {\n    opacity: 1;\n    transform: scale(1);\n}\n\n#mx-ranking-app .mx-check:hover .mx-check-box {\n    border-color: #07DFE2;\n}\n\n#mx-ranking-app .mx-check input[type=\"checkbox\"]:focus-visible + .mx-check-box {\n    outline: 2px solid rgba(7,223,226,.35);\n    outline-offset: 2px;\n}\n\n#mx-ranking-app .mx-check-label {\n    margin: 0 !important;\n    color: #94A3B8;\n    font-size: 11px;\n    font-weight: 700;\n    line-height: 1.2;\n}\n\n#mx-ranking-app .mx-check input[type=\"checkbox\"]:checked ~ .mx-check-label {\n    color: #E2E8F0;\n}\n\n\n\n\/* =========================================================\n   VERIFIED BADGE COLUMN ALIGNMENT\n========================================================= *\/\n\n#mx-ranking-app .mx-broker-title-row {\n    display: grid !important;\n    grid-template-columns: 110px auto !important;\n    align-items: center !important;\n    justify-content: start !important;\n    column-gap: 6px !important;\n    width: max-content !important;\n    max-width: none !important;\n    white-space: nowrap !important;\n    overflow: visible !important;\n}\n\n#mx-ranking-app .mx-broker-name {\n    width: 110px !important;\n    min-width: 110px !important;\n    max-width: 110px !important;\n    white-space: nowrap !important;\n    overflow: visible !important;\n}\n\n#mx-ranking-app .mx-broker-verified {\n    margin: 0 !important;\n    justify-self: start !important;\n    flex: none !important;\n    white-space: nowrap !important;\n}\n\n@container (max-width: 720px) {\n    #mx-ranking-app .mx-broker-title-row {\n        grid-template-columns: 92px auto !important;\n        column-gap: 5px !important;\n    }\n\n    #mx-ranking-app .mx-broker-name {\n        width: 92px !important;\n        min-width: 92px !important;\n        max-width: 92px !important;\n        font-size: 12px !important;\n    }\n\n    #mx-ranking-app .mx-broker-verified {\n        font-size: 6px !important;\n        padding: 3px 4px !important;\n    }\n}\n\n\n\n\/* =========================================================\n   VERIFIED BADGE RESPONSIVE CONTAINMENT FIX\n   Keeps badge on the same line without crossing into Score.\n========================================================= *\/\n\n#mx-ranking-app .mx-broker-content {\n    min-width: 0 !important;\n    max-width: 100% !important;\n    overflow: hidden !important;\n}\n\n#mx-ranking-app .mx-broker-title-row {\n    display: grid !important;\n    grid-template-columns: minmax(0, 1fr) auto !important;\n    align-items: center !important;\n    column-gap: 5px !important;\n\n    width: 100% !important;\n    max-width: 100% !important;\n    min-width: 0 !important;\n\n    white-space: nowrap !important;\n    overflow: hidden !important;\n}\n\n#mx-ranking-app .mx-broker-name {\n    width: auto !important;\n    min-width: 0 !important;\n    max-width: 100% !important;\n\n    overflow: hidden !important;\n    text-overflow: ellipsis !important;\n    white-space: nowrap !important;\n}\n\n#mx-ranking-app .mx-broker-verified {\n    width: auto !important;\n    min-width: max-content !important;\n    max-width: max-content !important;\n\n    margin: 0 !important;\n    justify-self: end !important;\n\n    white-space: nowrap !important;\n    overflow: visible !important;\n}\n\n\n\/* Medium widget widths *\/\n@container (max-width: 1250px) {\n\n    #mx-ranking-app .mx-broker-title-row {\n        column-gap: 4px !important;\n    }\n\n    #mx-ranking-app .mx-broker-verified {\n        font-size: 6px !important;\n        padding: 3px 4px !important;\n    }\n}\n\n\n\/* Compact widget widths *\/\n@container (max-width: 1000px) {\n\n    #mx-ranking-app .mx-broker-layout {\n        grid-template-columns:\n            72px\n            minmax(0, 1fr) !important;\n\n        gap: 6px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 72px !important;\n        max-width: 72px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        width: 68px !important;\n        max-width: 68px !important;\n    }\n\n    #mx-ranking-app .mx-broker-name {\n        font-size: 10px !important;\n    }\n\n    #mx-ranking-app .mx-broker-verified {\n        font-size: 5px !important;\n        padding: 2px 3px !important;\n    }\n}\n\n\n\/* Narrow\/mobile widget widths *\/\n@container (max-width: 720px) {\n\n    #mx-ranking-app .mx-broker-layout {\n        grid-template-columns:\n            54px\n            minmax(0, 1fr) !important;\n\n        gap: 5px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 54px !important;\n        max-width: 54px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        width: 51px !important;\n        max-width: 51px !important;\n    }\n\n    #mx-ranking-app .mx-broker-name {\n        font-size: 10px !important;\n    }\n\n    #mx-ranking-app .mx-broker-verified {\n        font-size: 5px !important;\n        padding: 2px 3px !important;\n    }\n}\n\n\n\n\/* =====================================================\n   FINAL STATUS + SCORE COLORS\n===================================================== *\/\n\n#mx-ranking-app .mx-broker-verified.is-verified {\n    color: #35d07f !important;\n    border: 1px solid rgba(53,208,127,.45) !important;\n    background: rgba(53,208,127,.10) !important;\n}\n\n#mx-ranking-app .mx-broker-verified.is-rejected {\n    color: #ff5c68 !important;\n    border: 1px solid rgba(255,92,104,.45) !important;\n    background: rgba(255,92,104,.10) !important;\n}\n\n#mx-ranking-app .mx-score-value {\n    color: #07DFE2 !important;\n}\n\n\n\/* MARKUNOX ranking final polish *\/\n#mx-ranking-app .mx-broker-verified.is-unverified {\n    color: #9fb0c6 !important;\n    border: 1px solid rgba(159,176,198,.34) !important;\n    background: rgba(159,176,198,.08) !important;\n}\n\n#mx-ranking-app .mx-col-action .mx-action-details,\n#mx-ranking-app .mx-col-action .mx-action-compare {\n    min-height: 30px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 7px 10px !important;\n    border-radius: 7px !important;\n    font-size: 10px;\n    font-weight: 800;\n    line-height: 1;\n    text-decoration: none !important;\n    box-sizing: border-box;\n}\n\n#mx-ranking-app .mx-col-action .mx-action-details {\n    color: #dce8f7 !important;\n    background: rgba(10,19,31,.92) !important;\n    border: 1px solid #29415d !important;\n}\n\n#mx-ranking-app .mx-col-action .mx-action-details:hover {\n    color: #ffffff !important;\n    background: #101d2d !important;\n    border-color: #3c5f83 !important;\n}\n\n#mx-ranking-app .mx-col-action .mx-action-compare {\n    color: #07dfe2 !important;\n    background: rgba(7,223,226,.08) !important;\n    border: 1px solid rgba(7,223,226,.58) !important;\n    box-shadow: inset 0 0 0 1px rgba(255,255,255,.02), 0 0 12px rgba(7,223,226,.06);\n}\n\n#mx-ranking-app .mx-col-action .mx-action-compare:hover {\n    color: #001315 !important;\n    background: #07dfe2 !important;\n    border-color: #07dfe2 !important;\n    box-shadow: 0 0 18px rgba(7,223,226,.22);\n}\n\n#mx-ranking-app .mx-col-action .mx-compare-disabled {\n    color: #66778c !important;\n    background: rgba(102,119,140,.06) !important;\n    border-color: rgba(102,119,140,.24) !important;\n    box-shadow: none !important;\n}\n\n\/* FINAL ACTION SPACING *\/\n#mx-ranking-app .mx-col-action {\n    padding-left: 12px !important;\n    padding-right: 12px !important;\n    gap: 8px !important;\n    box-sizing: border-box !important;\n}\n\n#mx-ranking-app .mx-col-action .mx-action-details,\n#mx-ranking-app .mx-col-action .mx-action-compare {\n    width: auto !important;\n    min-width: 58px !important;\n    padding: 8px 12px !important;\n    margin: 0 !important;\n    border-radius: 8px !important;\n    line-height: 1.1 !important;\n}\n\n#mx-ranking-app .mx-col-action .mx-action-compare {\n    color: #07dfe2 !important;\n    background: rgba(7,223,226,.07) !important;\n    border: 1px solid rgba(7,223,226,.55) !important;\n    box-shadow: inset 0 0 0 1px rgba(255,255,255,.02) !important;\n}\n\n#mx-ranking-app .mx-col-action .mx-action-compare:hover {\n    color: #001315 !important;\n    background: #07dfe2 !important;\n    border-color: #07dfe2 !important;\n}\n\n\n\n\/* =========================================================\n   SCORE SOURCE + AI RANKING LABEL\n========================================================= *\/\n#mx-ranking-app .mx-score-sources {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    gap: 4px;\n    margin-top: 4px;\n}\n\n#mx-ranking-app .mx-score-sources .mx-source-native-note {\n    margin: 0 !important;\n}\n\n#mx-ranking-app .mx-ai-ranking-note {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 18px;\n    padding: 3px 7px;\n    border: 1px solid rgba(7,223,226,.28);\n    border-radius: 5px;\n    background: rgba(7,223,226,.06);\n    color: #07DFE2;\n    font-size: 8px;\n    font-weight: 800;\n    line-height: 1;\n    letter-spacing: .25px;\n    white-space: nowrap;\n}\n\n\/* =========================================================\n   PROFESSIONAL BROKER FILTER SIDEBAR\n========================================================= *\/\n\n#mx-ranking-app .mx-ranking-content {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr) 286px;\n    gap: 18px;\n    align-items: start;\n}\n\n#mx-ranking-app .mx-ranking-main {\n    min-width: 0;\n    grid-column: 1;\n    grid-row: 1;\n}\n\n#mx-ranking-app .mx-filter-sidebar {\n    grid-column: 2;\n    grid-row: 1;\n    position: sticky;\n    top: 18px;\n    display: block !important;\n    width: 100%;\n    max-height: calc(100vh - 36px);\n    overflow-y: auto;\n    padding: 0;\n    border: 1px solid #17283c;\n    border-radius: 12px;\n    background:\n        linear-gradient(180deg, rgba(10,20,32,.98), rgba(5,12,20,.98));\n    box-shadow: 0 18px 50px rgba(0,0,0,.30);\n    z-index: 60;\n}\n\n#mx-ranking-app .mx-filter-sidebar::-webkit-scrollbar {\n    width: 6px;\n}\n\n#mx-ranking-app .mx-filter-sidebar::-webkit-scrollbar-track {\n    background: transparent;\n}\n\n#mx-ranking-app .mx-filter-sidebar::-webkit-scrollbar-thumb {\n    background: #233c56;\n    border-radius: 999px;\n}\n\n#mx-ranking-app .mx-filter-sidebar-head {\n    position: sticky;\n    top: 0;\n    z-index: 4;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    padding: 16px;\n    border-bottom: 1px solid #17283c;\n    background: rgba(5,12,20,.96);\n    backdrop-filter: blur(12px);\n}\n\n#mx-ranking-app .mx-filter-sidebar-head strong {\n    display: block;\n    color: #fff;\n    font-size: 14px;\n    font-weight: 800;\n}\n\n#mx-ranking-app .mx-filter-sidebar-head span {\n    display: block;\n    margin-top: 3px;\n    color: #72849a;\n    font-size: 10px;\n}\n\n#mx-ranking-app .mx-filter-close {\n    display: none;\n    width: 30px;\n    height: 30px;\n    padding: 0;\n    border: 1px solid #243950;\n    border-radius: 7px;\n    background: #08111c;\n    color: #cbd5e1;\n    font-size: 20px;\n    line-height: 1;\n    cursor: pointer;\n}\n\n#mx-ranking-app .mx-filter-section {\n    padding: 14px 16px;\n    border-bottom: 1px solid rgba(23,40,60,.72);\n}\n\n#mx-ranking-app .mx-filter-section-title {\n    margin-bottom: 11px;\n    color: #07DFE2;\n    font-size: 10px;\n    font-weight: 800;\n    letter-spacing: .08em;\n    text-transform: uppercase;\n}\n\n#mx-ranking-app .mx-filter-field {\n    display: block;\n    margin-bottom: 11px;\n}\n\n#mx-ranking-app .mx-filter-field:last-child {\n    margin-bottom: 0;\n}\n\n#mx-ranking-app .mx-filter-field > span {\n    display: block;\n    margin-bottom: 6px;\n    color: #9fb0c4;\n    font-size: 10px;\n    font-weight: 650;\n}\n\n#mx-ranking-app .mx-filter-field input[type=\"text\"],\n#mx-ranking-app .mx-sidebar-select {\n    width: 100%;\n    height: 38px;\n    padding: 0 10px;\n    border: 1px solid #1A2B40;\n    border-radius: 7px;\n    background: #02060C !important;\n    color: #fff !important;\n    font-size: 11px;\n    outline: none;\n}\n\n#mx-ranking-app .mx-filter-field input[type=\"text\"]:focus,\n#mx-ranking-app .mx-sidebar-select:focus {\n    border-color: #07DFE2;\n    box-shadow: 0 0 0 2px rgba(7,223,226,.08);\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-check {\n    min-height: 34px;\n    margin: 3px 0;\n    padding: 6px 0;\n    display: flex;\n    align-items: center;\n    gap: 9px;\n    border: 0;\n    background: transparent;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-check-label {\n    color: #cbd5e1;\n    font-size: 11px;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-filter-actions {\n    position: sticky;\n    bottom: 0;\n    z-index: 4;\n    display: grid;\n    grid-template-columns: .8fr 1.2fr;\n    gap: 8px;\n    padding: 14px 16px;\n    border-top: 1px solid #17283c;\n    background: rgba(5,12,20,.97);\n    backdrop-filter: blur(12px);\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-filter-actions button {\n    min-height: 38px;\n    border-radius: 7px;\n    font-size: 11px;\n    font-weight: 800;\n}\n\n\/* Filter button is mainly the mobile drawer trigger. *\/\n#mx-ranking-app #mx-filter-toggle {\n    display: none;\n}\n\n@media (max-width: 980px) {\n    #mx-ranking-app .mx-ranking-content {\n        display: block;\n    }\n\n    #mx-ranking-app .mx-ranking-main {\n        width: 100%;\n    }\n\n    #mx-ranking-app #mx-filter-toggle {\n        display: inline-flex;\n    }\n\n    #mx-ranking-app .mx-filter-sidebar {\n        position: fixed !important;\n        top: 0 !important;\n        right: 0;\n        bottom: 0;\n        left: auto;\n        z-index: 10050;\n        width: min(88vw, 340px);\n        max-height: 100vh;\n        border-radius: 0;\n        transform: translateX(104%);\n        transition: transform .22s ease;\n        box-shadow: -24px 0 60px rgba(0,0,0,.55);\n    }\n\n    #mx-ranking-app .mx-filter-sidebar.open {\n        transform: translateX(0);\n    }\n\n    #mx-ranking-app .mx-filter-close {\n        display: inline-grid;\n        place-items: center;\n    }\n\n    body.mx-filter-drawer-open::before {\n        content: \"\";\n        position: fixed;\n        inset: 0;\n        z-index: 10040;\n        background: rgba(0,0,0,.60);\n        backdrop-filter: blur(2px);\n    }\n}\n\n@media (min-width: 981px) and (max-width: 1250px) {\n    #mx-ranking-app .mx-ranking-content {\n        grid-template-columns: minmax(0, 1fr) 250px;\n        gap: 12px;\n    }\n}\n\n\n\n\/* =========================================================\n   FINAL SIDEBAR \u2014 IRANBROKER-INSPIRED STRUCTURE\n   MARKUNOX PALETTE \u2014 NO BLUE\n========================================================= *\/\n\n#mx-ranking-app .mx-ranking-content {\n    display: grid !important;\n    grid-template-columns: minmax(0, 1fr) 300px !important;\n    gap: 18px !important;\n    align-items: start !important;\n}\n\n#mx-ranking-app .mx-ranking-main {\n    min-width: 0 !important;\n    grid-column: 1 !important;\n    grid-row: 1 !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar {\n    grid-column: 2 !important;\n    grid-row: 1 !important;\n    position: sticky !important;\n    top: 18px !important;\n    display: block !important;\n    width: 100% !important;\n    max-height: calc(100vh - 36px) !important;\n    overflow-y: auto !important;\n    padding: 0 0 12px !important;\n    border: 0 !important;\n    border-radius: 0 !important;\n    background: transparent !important;\n    box-shadow: none !important;\n    color: #FFFFFF !important;\n    z-index: 60 !important;\n\n    --mx-filter-accent: #07DFE2;\n    --mx-filter-accent-soft: rgba(7,223,226,.10);\n    --mx-filter-bg: #05090D;\n    --mx-filter-card: #0A0F14;\n    --mx-filter-input: #05090D;\n    --mx-filter-border: #263038;\n    --mx-filter-border-strong: #364149;\n    --mx-filter-text: #FFFFFF;\n    --mx-filter-muted: #929CA5;\n}\n\n#mx-ranking-app .mx-filter-sidebar,\n#mx-ranking-app .mx-filter-sidebar * {\n    box-sizing: border-box !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar::-webkit-scrollbar {\n    width: 5px !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar::-webkit-scrollbar-track {\n    background: transparent !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar::-webkit-scrollbar-thumb {\n    background: #3B454C !important;\n    border-radius: 999px !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar-head {\n    position: relative !important;\n    top: auto !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: space-between !important;\n    gap: 12px !important;\n    margin: 0 0 10px !important;\n    padding: 14px 15px !important;\n    border: 1px solid var(--mx-filter-border) !important;\n    border-radius: 9px !important;\n    background: var(--mx-filter-card) !important;\n    backdrop-filter: none !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar-head strong {\n    display: block !important;\n    color: var(--mx-filter-text) !important;\n    font-size: 13px !important;\n    font-weight: 800 !important;\n    letter-spacing: 0 !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar-head span {\n    display: block !important;\n    margin-top: 3px !important;\n    color: var(--mx-filter-muted) !important;\n    font-size: 9px !important;\n    line-height: 1.35 !important;\n}\n\n#mx-ranking-app .mx-filter-card {\n    margin: 0 0 9px !important;\n    overflow: hidden !important;\n    border: 1px solid var(--mx-filter-border) !important;\n    border-radius: 9px !important;\n    background: var(--mx-filter-card) !important;\n    box-shadow: none !important;\n}\n\n#mx-ranking-app .mx-filter-card-head {\n    width: 100% !important;\n    min-height: 42px !important;\n    padding: 10px 13px !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: space-between !important;\n    gap: 10px !important;\n    border: 0 !important;\n    border-radius: 0 !important;\n    background: var(--mx-filter-card) !important;\n    color: var(--mx-filter-text) !important;\n    font-size: 11px !important;\n    font-weight: 750 !important;\n    text-align: left !important;\n    cursor: pointer !important;\n    box-shadow: none !important;\n    outline: none !important;\n}\n\n#mx-ranking-app .mx-filter-card-head:hover,\n#mx-ranking-app .mx-filter-card-head:focus,\n#mx-ranking-app .mx-filter-card-head:active {\n    background: #0D1318 !important;\n    color: var(--mx-filter-text) !important;\n    border: 0 !important;\n    box-shadow: none !important;\n}\n\n#mx-ranking-app .mx-filter-chevron {\n    color: #AAB2B8 !important;\n    font-size: 13px !important;\n    font-weight: 700 !important;\n}\n\n#mx-ranking-app .mx-filter-card-body {\n    display: none !important;\n    padding: 11px 13px 13px !important;\n    border-top: 1px solid var(--mx-filter-border) !important;\n    background: #070C10 !important;\n}\n\n#mx-ranking-app .mx-filter-card.open .mx-filter-card-body {\n    display: block !important;\n}\n\n#mx-ranking-app .mx-filter-field {\n    display: block !important;\n    margin: 0 0 10px !important;\n}\n\n#mx-ranking-app .mx-filter-field:last-child {\n    margin-bottom: 0 !important;\n}\n\n#mx-ranking-app .mx-filter-field > span {\n    display: block !important;\n    margin: 0 0 6px !important;\n    color: #AEB6BC !important;\n    font-size: 9px !important;\n    font-weight: 650 !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar input[type=\"text\"],\n#mx-ranking-app .mx-filter-sidebar .mx-sidebar-select,\n#mx-ranking-app .mx-filter-sidebar .mx-custom-select-button {\n    width: 100% !important;\n    height: 36px !important;\n    padding: 0 10px !important;\n    border: 1px solid var(--mx-filter-border-strong) !important;\n    border-radius: 6px !important;\n    background: var(--mx-filter-input) !important;\n    color: #FFFFFF !important;\n    font-size: 10px !important;\n    outline: none !important;\n    box-shadow: none !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar input[type=\"text\"]::placeholder {\n    color: #626C74 !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar input[type=\"text\"]:focus,\n#mx-ranking-app .mx-filter-sidebar .mx-sidebar-select:focus,\n#mx-ranking-app .mx-filter-sidebar .mx-custom-select-button:focus,\n#mx-ranking-app .mx-filter-sidebar .mx-custom-select-button:hover {\n    border-color: var(--mx-filter-accent) !important;\n    background: #05090D !important;\n    color: #FFFFFF !important;\n    box-shadow: 0 0 0 2px var(--mx-filter-accent-soft) !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-custom-select-menu {\n    border: 1px solid var(--mx-filter-border-strong) !important;\n    background: #070C10 !important;\n    box-shadow: 0 16px 38px rgba(0,0,0,.45) !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-custom-select-menu button,\n#mx-ranking-app .mx-filter-sidebar .mx-custom-select-option {\n    background: #070C10 !important;\n    color: #E7ECEF !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-custom-select-menu button:hover,\n#mx-ranking-app .mx-filter-sidebar .mx-custom-select-menu button.active,\n#mx-ranking-app .mx-filter-sidebar .mx-custom-select-option:hover,\n#mx-ranking-app .mx-filter-sidebar .mx-custom-select-option.active {\n    background: rgba(7,223,226,.10) !important;\n    color: #07DFE2 !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-check {\n    min-height: 30px !important;\n    margin: 0 !important;\n    padding: 5px 0 !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 9px !important;\n    border: 0 !important;\n    background: transparent !important;\n    cursor: pointer !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-check + .mx-check {\n    border-top: 1px solid rgba(255,255,255,.04) !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-check input {\n    position: absolute !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-check-box {\n    width: 14px !important;\n    height: 14px !important;\n    flex: 0 0 14px !important;\n    display: inline-grid !important;\n    place-items: center !important;\n    border: 1px solid #59636A !important;\n    border-radius: 3px !important;\n    background: #05090D !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-check input:checked + .mx-check-box {\n    border-color: #07DFE2 !important;\n    background: #07DFE2 !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-check input:checked + .mx-check-box::after {\n    content: \"\u2713\" !important;\n    color: #001113 !important;\n    font-size: 10px !important;\n    font-weight: 900 !important;\n    line-height: 1 !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-check-label {\n    color: #D5DADD !important;\n    font-size: 10px !important;\n    font-weight: 500 !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar .mx-filter-actions {\n    position: sticky !important;\n    bottom: 0 !important;\n    z-index: 5 !important;\n    display: grid !important;\n    grid-template-columns: .78fr 1.22fr !important;\n    gap: 8px !important;\n    margin-top: 2px !important;\n    padding: 11px !important;\n    border: 1px solid var(--mx-filter-border) !important;\n    border-radius: 9px !important;\n    background: #080D11 !important;\n    backdrop-filter: none !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar #mx-filter-reset,\n#mx-ranking-app .mx-filter-sidebar #mx-filter-apply {\n    min-height: 36px !important;\n    padding: 0 10px !important;\n    border-radius: 6px !important;\n    font-size: 10px !important;\n    font-weight: 800 !important;\n    box-shadow: none !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar #mx-filter-reset {\n    border: 1px solid #4B555C !important;\n    background: #0A0F14 !important;\n    color: #D5DADD !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar #mx-filter-reset:hover {\n    border-color: #07DFE2 !important;\n    background: rgba(7,223,226,.08) !important;\n    color: #07DFE2 !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar #mx-filter-apply,\n#mx-ranking-app .mx-filter-sidebar #mx-filter-apply:hover,\n#mx-ranking-app .mx-filter-sidebar #mx-filter-apply:focus,\n#mx-ranking-app .mx-filter-sidebar #mx-filter-apply:active {\n    border: 1px solid #07DFE2 !important;\n    background: #07DFE2 !important;\n    color: #001113 !important;\n}\n\n\/* Hide the old desktop Filter button. Sidebar is always visible on desktop. *\/\n#mx-ranking-app #mx-filter-toggle {\n    display: none !important;\n}\n\n@media (max-width: 980px) {\n    #mx-ranking-app .mx-ranking-content {\n        display: block !important;\n    }\n\n    #mx-ranking-app #mx-filter-toggle {\n        display: inline-flex !important;\n    }\n\n    #mx-ranking-app .mx-filter-sidebar {\n        position: fixed !important;\n        top: 0 !important;\n        right: 0 !important;\n        bottom: 0 !important;\n        left: auto !important;\n        z-index: 10050 !important;\n        width: min(90vw, 340px) !important;\n        max-height: 100vh !important;\n        padding: 12px !important;\n        background: #05090D !important;\n        transform: translateX(104%) !important;\n        transition: transform .22s ease !important;\n        box-shadow: -24px 0 60px rgba(0,0,0,.55) !important;\n    }\n\n    #mx-ranking-app .mx-filter-sidebar.open {\n        transform: translateX(0) !important;\n    }\n\n    #mx-ranking-app .mx-filter-close {\n        display: inline-grid !important;\n        place-items: center !important;\n        width: 30px !important;\n        height: 30px !important;\n        border: 1px solid #485159 !important;\n        border-radius: 6px !important;\n        background: #0A0F14 !important;\n        color: #FFFFFF !important;\n    }\n}\n\n@media (min-width: 981px) and (max-width: 1250px) {\n    #mx-ranking-app .mx-ranking-content {\n        grid-template-columns: minmax(0, 1fr) 260px !important;\n        gap: 12px !important;\n    }\n}\n\n\n\n\/* =========================================================\n   FINAL FULL-WIDTH PAGE OVERRIDE\n========================================================= *\/\n\nhtml,\nbody {\n    width: 100% !important;\n    max-width: none !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    overflow-x: hidden !important;\n}\n\n#mx-ranking-app,\n#mx-ranking-app .mx-ranking-shell,\n#mx-ranking-app .mx-ranking-container,\n#mx-ranking-app .mx-ranking-wrap,\n#mx-ranking-app .mx-ranking-content {\n    width: 100% !important;\n    max-width: none !important;\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n}\n\n#mx-ranking-app {\n    padding-left: 20px !important;\n    padding-right: 20px !important;\n}\n\n#mx-ranking-app .mx-ranking-content {\n    grid-template-columns: minmax(0, 1fr) 320px !important;\n    gap: 20px !important;\n}\n\n#mx-ranking-app .mx-ranking-main {\n    width: 100% !important;\n    max-width: none !important;\n    min-width: 0 !important;\n}\n\n#mx-ranking-app .mx-ranking-table,\n#mx-ranking-app .mx-ranking-list,\n#mx-ranking-app #mx-ranking-rows,\n#mx-ranking-app .mx-ranking-row {\n    width: 100% !important;\n    max-width: none !important;\n}\n\n#mx-ranking-app .mx-rank-tabs,\n#mx-ranking-app .mx-ranking-toolbar,\n#mx-ranking-app .mx-ranking-controls,\n#mx-ranking-app .mx-ranking-header {\n    width: 100% !important;\n    max-width: none !important;\n}\n\n@media (min-width: 1500px) {\n    #mx-ranking-app {\n        padding-left: 28px !important;\n        padding-right: 28px !important;\n    }\n\n    #mx-ranking-app .mx-ranking-content {\n        grid-template-columns: minmax(0, 1fr) 340px !important;\n        gap: 24px !important;\n    }\n}\n\n@media (max-width: 980px) {\n    #mx-ranking-app {\n        padding-left: 10px !important;\n        padding-right: 10px !important;\n    }\n\n    #mx-ranking-app .mx-ranking-content {\n        display: block !important;\n    }\n}\n\n\n\n\/* =========================================================\n   FINAL RANKING LAYOUT \u2014 RESTORE ALL COLUMNS\n   + CLEAN CARDS + DARK IRANBROKER-STYLE FILTER\n========================================================= *\/\n\n#mx-ranking-app {\n    width: 100% !important;\n    max-width: none !important;\n    margin: 0 !important;\n    padding: 0 18px 36px !important;\n    box-sizing: border-box !important;\n}\n\n\/* Main ranking + sidebar *\/\n#mx-ranking-app .mx-ranking-content {\n    display: grid !important;\n    grid-template-columns: minmax(0, 1fr) 320px !important;\n    gap: 22px !important;\n    width: 100% !important;\n    max-width: none !important;\n    align-items: start !important;\n}\n\n#mx-ranking-app .mx-ranking-main {\n    min-width: 0 !important;\n    width: 100% !important;\n    max-width: none !important;\n    grid-column: 1 !important;\n    grid-row: 1 !important;\n}\n\n\/* RESTORE ALL 7 COLUMNS *\/\n#mx-ranking-app .mx-ranking-header,\n#mx-ranking-app .mx-ranking-row {\n    display: grid !important;\n    grid-template-columns:\n        58px\n        minmax(260px, 1.8fr)\n        98px\n        150px\n        138px\n        122px\n        120px !important;\n    column-gap: 12px !important;\n    width: 100% !important;\n    max-width: none !important;\n    align-items: center !important;\n    box-sizing: border-box !important;\n}\n\n\/* Make row cards look balanced again *\/\n#mx-ranking-app .mx-ranking-row {\n    min-height: 118px !important;\n    padding: 16px 14px !important;\n    border: 1px solid #172333 !important;\n    border-radius: 12px !important;\n    background: #08111C !important;\n    overflow: visible !important;\n}\n\n#mx-ranking-app #mx-ranking-rows {\n    display: grid !important;\n    gap: 12px !important;\n}\n\n#mx-ranking-app .mx-ranking-header {\n    min-height: 44px !important;\n    padding: 0 14px !important;\n}\n\n\/* Broker identity *\/\n#mx-ranking-app .mx-col-broker {\n    min-width: 0 !important;\n    overflow: visible !important;\n}\n\n#mx-ranking-app .mx-broker-layout {\n    display: grid !important;\n    grid-template-columns: 92px minmax(150px, 1fr) !important;\n    gap: 12px !important;\n    align-items: center !important;\n    width: 100% !important;\n}\n\n#mx-ranking-app .mx-broker-logo-wrap {\n    width: 92px !important;\n    max-width: 92px !important;\n    min-width: 92px !important;\n}\n\n#mx-ranking-app .mx-broker-logo {\n    max-width: 86px !important;\n    width: auto !important;\n    height: auto !important;\n    max-height: 48px !important;\n    object-fit: contain !important;\n}\n\n#mx-ranking-app .mx-broker-content {\n    min-width: 0 !important;\n    overflow: visible !important;\n}\n\n#mx-ranking-app .mx-broker-title-row {\n    display: flex !important;\n    align-items: center !important;\n    flex-wrap: wrap !important;\n    gap: 6px !important;\n    min-width: 0 !important;\n}\n\n#mx-ranking-app .mx-broker-name {\n    white-space: normal !important;\n    overflow: visible !important;\n    text-overflow: clip !important;\n    max-width: 100% !important;\n    line-height: 1.2 !important;\n}\n\n\/* Restore Popularity and Action *\/\n#mx-ranking-app .mx-col-popularity,\n#mx-ranking-app .mx-col-action {\n    display: flex !important;\n}\n\n#mx-ranking-app .mx-col-popularity {\n    flex-direction: column !important;\n    align-items: center !important;\n    justify-content: center !important;\n    min-width: 0 !important;\n}\n\n#mx-ranking-app .mx-col-action {\n    flex-direction: column !important;\n    align-items: stretch !important;\n    justify-content: center !important;\n    gap: 7px !important;\n    min-width: 0 !important;\n}\n\n#mx-ranking-app .mx-action-details,\n#mx-ranking-app .mx-action-compare {\n    width: 100% !important;\n    min-width: 0 !important;\n    padding: 8px 9px !important;\n    white-space: nowrap !important;\n    font-size: 10px !important;\n    box-sizing: border-box !important;\n}\n\n\/* Sidebar *\/\n#mx-ranking-app .mx-filter-sidebar,\n#mx-ranking-app #mx-filter-panel {\n    display: block !important;\n    position: sticky !important;\n    top: 18px !important;\n    grid-column: 2 !important;\n    grid-row: 1 !important;\n    width: 320px !important;\n    max-width: 320px !important;\n    max-height: calc(100vh - 36px) !important;\n    overflow-y: auto !important;\n    padding: 0 0 8px !important;\n    border: 0 !important;\n    border-radius: 0 !important;\n    background: transparent !important;\n    box-shadow: none !important;\n}\n\n\/* No separate filter header *\/\n#mx-ranking-app .mx-filter-sidebar-head {\n    display: none !important;\n}\n\n\/* Cards like IranBroker, but dark MARKUNOX *\/\n#mx-ranking-app .mx-filter-card {\n    margin: 0 0 10px !important;\n    border: 1px solid #1A2B40 !important;\n    border-radius: 9px !important;\n    background: #07101B !important;\n    overflow: hidden !important;\n    box-shadow: none !important;\n}\n\n#mx-ranking-app .mx-filter-card-head {\n    width: 100% !important;\n    min-height: 40px !important;\n    padding: 11px 13px !important;\n    border: 0 !important;\n    border-bottom: 1px solid #1A2B40 !important;\n    border-radius: 0 !important;\n    background: #07101B !important;\n    color: #FFFFFF !important;\n    font-size: 11px !important;\n    font-weight: 800 !important;\n    text-align: left !important;\n    cursor: default !important;\n    pointer-events: none !important;\n    box-shadow: none !important;\n}\n\n#mx-ranking-app .mx-filter-chevron {\n    display: none !important;\n}\n\n#mx-ranking-app .mx-filter-card-body,\n#mx-ranking-app .mx-filter-card.open .mx-filter-card-body {\n    display: block !important;\n    padding: 11px 13px 13px !important;\n    background: #07101B !important;\n    border-top: 0 !important;\n}\n\n#mx-ranking-app .mx-filter-field > span {\n    color: #94A3B8 !important;\n    font-size: 10px !important;\n}\n\n\/* Hide dropdown UIs \u2014 list menu replaces them *\/\n#mx-ranking-app .mx-native-hidden-select,\n#mx-ranking-app .mx-custom-select,\n#mx-ranking-app .mx-custom-select-button,\n#mx-ranking-app .mx-custom-select-menu,\n#mx-ranking-app .mx-sidebar-select {\n    display: none !important;\n}\n\n\/* Search field *\/\n#mx-ranking-app .mx-filter-sidebar input[type=\"text\"],\n#mx-ranking-app .mx-list-search {\n    width: 100% !important;\n    min-height: 34px !important;\n    padding: 7px 9px !important;\n    border: 1px solid #253B59 !important;\n    border-radius: 6px !important;\n    background: #02060C !important;\n    color: #FFFFFF !important;\n    outline: none !important;\n    box-shadow: none !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar input[type=\"text\"]::placeholder,\n#mx-ranking-app .mx-list-search::placeholder {\n    color: #66778C !important;\n}\n\n\/* List style *\/\n#mx-ranking-app .mx-list-select {\n    display: block !important;\n}\n\n#mx-ranking-app .mx-list-options {\n    margin-top: 8px !important;\n    max-height: 210px !important;\n    overflow-y: auto !important;\n    padding-right: 2px !important;\n}\n\n#mx-ranking-app .mx-list-options.compact {\n    max-height: none !important;\n}\n\n#mx-ranking-app .mx-list-option {\n    display: flex !important;\n    align-items: center !important;\n    gap: 8px !important;\n    width: 100% !important;\n    padding: 5px 0 !important;\n    border: 0 !important;\n    background: transparent !important;\n    color: #CBD5E1 !important;\n    text-align: left !important;\n    font-size: 10px !important;\n    cursor: pointer !important;\n}\n\n#mx-ranking-app .mx-list-option::before {\n    content: \"\" !important;\n    width: 13px !important;\n    height: 13px !important;\n    flex: 0 0 13px !important;\n    border: 1px solid #526276 !important;\n    border-radius: 2px !important;\n    background: #02060C !important;\n    box-sizing: border-box !important;\n}\n\n#mx-ranking-app .mx-list-option.active::before {\n    border-color: #07DFE2 !important;\n    background: #07DFE2 !important;\n    box-shadow: inset 0 0 0 3px #02060C !important;\n}\n\n#mx-ranking-app .mx-list-option.active {\n    color: #FFFFFF !important;\n    font-weight: 700 !important;\n}\n\n\/* Existing checkboxes *\/\n#mx-ranking-app .mx-filter-sidebar .mx-check-label {\n    color: #CBD5E1 !important;\n    font-size: 10px !important;\n}\n\n\/* Action buttons *\/\n#mx-ranking-app .mx-filter-actions {\n    position: sticky !important;\n    bottom: 0 !important;\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 8px !important;\n    padding: 10px !important;\n    border: 1px solid #1A2B40 !important;\n    border-radius: 9px !important;\n    background: #07101B !important;\n}\n\n#mx-ranking-app #mx-filter-reset {\n    background: #02060C !important;\n    border: 1px solid #253B59 !important;\n    color: #CBD5E1 !important;\n}\n\n#mx-ranking-app #mx-filter-apply {\n    background: #07DFE2 !important;\n    border: 1px solid #07DFE2 !important;\n    color: #02060C !important;\n}\n\n#mx-ranking-app #mx-filter-toggle {\n    display: none !important;\n}\n\n\/* Responsive desktop *\/\n@media (max-width: 1450px) {\n    #mx-ranking-app .mx-ranking-content {\n        grid-template-columns: minmax(0, 1fr) 290px !important;\n        gap: 16px !important;\n    }\n\n    #mx-ranking-app .mx-filter-sidebar,\n    #mx-ranking-app #mx-filter-panel {\n        width: 290px !important;\n        max-width: 290px !important;\n    }\n\n    #mx-ranking-app .mx-ranking-header,\n    #mx-ranking-app .mx-ranking-row {\n        grid-template-columns:\n            52px\n            minmax(220px, 1.7fr)\n            90px\n            140px\n            126px\n            110px\n            108px !important;\n        column-gap: 9px !important;\n    }\n\n    #mx-ranking-app .mx-broker-layout {\n        grid-template-columns: 82px minmax(125px, 1fr) !important;\n        gap: 9px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 82px !important;\n        min-width: 82px !important;\n        max-width: 82px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        max-width: 76px !important;\n    }\n}\n\n\/* Mobile *\/\n@media (max-width: 980px) {\n    #mx-ranking-app {\n        padding-left: 10px !important;\n        padding-right: 10px !important;\n    }\n\n    #mx-ranking-app .mx-ranking-content {\n        display: block !important;\n    }\n\n    #mx-ranking-app #mx-filter-toggle {\n        display: inline-flex !important;\n    }\n\n    #mx-ranking-app .mx-filter-sidebar,\n    #mx-ranking-app #mx-filter-panel {\n        position: fixed !important;\n        top: 0 !important;\n        right: 0 !important;\n        bottom: 0 !important;\n        width: min(88vw, 330px) !important;\n        max-width: 330px !important;\n        max-height: 100vh !important;\n        padding: 12px !important;\n        background: #02060C !important;\n    }\n}\n\n\n\n\/* =========================================================\n   FINAL COLUMN SPACING \/ ALIGNMENT FIX\n========================================================= *\/\n\n\/* Equal, clean spacing across every ranking card *\/\n#mx-ranking-app .mx-ranking-header,\n#mx-ranking-app .mx-ranking-row {\n    grid-template-columns:\n        58px\n        minmax(280px, 1.9fr)\n        105px\n        155px\n        145px\n        125px\n        118px !important;\n    column-gap: 16px !important;\n}\n\n\/* Make header labels sit directly above their own data *\/\n#mx-ranking-app .mx-ranking-header > div {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: center !important;\n}\n\n\/* Broker header aligns exactly with logo + broker name *\/\n#mx-ranking-app .mx-ranking-header > div:nth-child(2) {\n    justify-content: flex-start !important;\n    text-align: left !important;\n    padding-left: 0 !important;\n}\n\n\/* Broker cell: logo and name stay neatly inside Broker column *\/\n#mx-ranking-app .mx-col-broker {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: flex-start !important;\n    width: 100% !important;\n    min-width: 0 !important;\n}\n\n#mx-ranking-app .mx-broker-layout {\n    display: grid !important;\n    grid-template-columns: 92px minmax(160px, 1fr) !important;\n    align-items: center !important;\n    justify-content: start !important;\n    column-gap: 14px !important;\n    width: 100% !important;\n    min-width: 0 !important;\n}\n\n#mx-ranking-app .mx-broker-logo-wrap {\n    width: 92px !important;\n    min-width: 92px !important;\n    max-width: 92px !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    margin: 0 !important;\n}\n\n#mx-ranking-app .mx-broker-logo {\n    display: block !important;\n    max-width: 84px !important;\n    max-height: 46px !important;\n    margin: 0 auto !important;\n    object-fit: contain !important;\n}\n\n#mx-ranking-app .mx-broker-content {\n    display: flex !important;\n    flex-direction: column !important;\n    align-items: flex-start !important;\n    justify-content: center !important;\n    min-width: 0 !important;\n    margin: 0 !important;\n}\n\n#mx-ranking-app .mx-broker-title-row {\n    width: 100% !important;\n    justify-content: flex-start !important;\n}\n\n\/* Center the numeric \/ metric columns consistently *\/\n#mx-ranking-app .mx-col-rank,\n#mx-ranking-app .mx-col-score,\n#mx-ranking-app .mx-col-regulation,\n#mx-ranking-app .mx-col-trading,\n#mx-ranking-app .mx-col-popularity,\n#mx-ranking-app .mx-col-action {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: center !important;\n    min-width: 0 !important;\n}\n\n\/* Keep their internal stacks centered *\/\n#mx-ranking-app .mx-col-score,\n#mx-ranking-app .mx-col-regulation,\n#mx-ranking-app .mx-col-trading,\n#mx-ranking-app .mx-col-popularity,\n#mx-ranking-app .mx-col-action {\n    flex-direction: column !important;\n}\n\n\/* Same inner horizontal breathing room in every card *\/\n#mx-ranking-app .mx-ranking-row {\n    padding-left: 16px !important;\n    padding-right: 16px !important;\n}\n\n\/* Header uses same inner width as rows *\/\n#mx-ranking-app .mx-ranking-header {\n    padding-left: 16px !important;\n    padding-right: 16px !important;\n}\n\n\/* Prevent broker names from getting clipped *\/\n#mx-ranking-app .mx-broker-name {\n    white-space: normal !important;\n    overflow: visible !important;\n    text-overflow: clip !important;\n    max-width: 100% !important;\n    line-height: 1.2 !important;\n}\n\n\/* Slightly tighter action stack so it stays fully inside its column *\/\n#mx-ranking-app .mx-col-action {\n    gap: 6px !important;\n}\n\n#mx-ranking-app .mx-action-details,\n#mx-ranking-app .mx-action-compare {\n    width: 100% !important;\n    max-width: 110px !important;\n    margin: 0 auto !important;\n}\n\n\/* Responsive desktop *\/\n@media (max-width: 1450px) {\n    #mx-ranking-app .mx-ranking-header,\n    #mx-ranking-app .mx-ranking-row {\n        grid-template-columns:\n            52px\n            minmax(235px, 1.8fr)\n            94px\n            140px\n            128px\n            112px\n            108px !important;\n        column-gap: 11px !important;\n    }\n\n    #mx-ranking-app .mx-broker-layout {\n        grid-template-columns: 80px minmax(135px, 1fr) !important;\n        column-gap: 10px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 80px !important;\n        min-width: 80px !important;\n        max-width: 80px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        max-width: 74px !important;\n    }\n}\n\n\n\n\/* =========================================================\n   PRECISE HEADER \/ CELL ALIGNMENT\n   Broker logo + name centered directly below Broker header\n========================================================= *\/\n\n\/* Balanced column geometry *\/\n#mx-ranking-app .mx-ranking-header,\n#mx-ranking-app .mx-ranking-row {\n    grid-template-columns:\n        70px\n        minmax(320px, 1.55fr)\n        110px\n        160px\n        150px\n        130px\n        120px !important;\n    column-gap: 14px !important;\n}\n\n\/* Every header label centered over its own column *\/\n#mx-ranking-app .mx-ranking-header > div {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: center !important;\n    padding: 0 !important;\n}\n\n\/* Rank centered *\/\n#mx-ranking-app .mx-col-rank {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n}\n\n\/* The WHOLE broker identity is centered below \"Broker\" *\/\n#mx-ranking-app .mx-col-broker {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    min-width: 0 !important;\n    width: 100% !important;\n}\n\n#mx-ranking-app .mx-broker-layout {\n    width: auto !important;\n    max-width: 100% !important;\n    display: grid !important;\n    grid-template-columns: 100px 165px !important;\n    column-gap: 16px !important;\n    align-items: center !important;\n    justify-content: center !important;\n    margin: 0 auto !important;\n}\n\n#mx-ranking-app .mx-broker-logo-wrap {\n    width: 100px !important;\n    min-width: 100px !important;\n    max-width: 100px !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n}\n\n#mx-ranking-app .mx-broker-logo {\n    max-width: 94px !important;\n    max-height: 48px !important;\n    width: auto !important;\n    height: auto !important;\n    object-fit: contain !important;\n    margin: 0 auto !important;\n}\n\n#mx-ranking-app .mx-broker-content {\n    width: 165px !important;\n    min-width: 165px !important;\n    max-width: 165px !important;\n    display: flex !important;\n    flex-direction: column !important;\n    align-items: flex-start !important;\n    justify-content: center !important;\n    margin: 0 !important;\n}\n\n#mx-ranking-app .mx-broker-title-row {\n    width: 100% !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: flex-start !important;\n    flex-wrap: wrap !important;\n    gap: 6px !important;\n}\n\n#mx-ranking-app .mx-broker-name {\n    white-space: normal !important;\n    overflow: visible !important;\n    text-overflow: clip !important;\n    line-height: 1.2 !important;\n}\n\n\/* All metric cells centered exactly below their headers *\/\n#mx-ranking-app .mx-col-score,\n#mx-ranking-app .mx-col-regulation,\n#mx-ranking-app .mx-col-trading,\n#mx-ranking-app .mx-col-popularity,\n#mx-ranking-app .mx-col-action {\n    display: flex !important;\n    flex-direction: column !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: center !important;\n    min-width: 0 !important;\n}\n\n\/* Action buttons stay inside Action column *\/\n#mx-ranking-app .mx-col-action {\n    gap: 7px !important;\n}\n\n#mx-ranking-app .mx-action-details,\n#mx-ranking-app .mx-action-compare {\n    width: 100% !important;\n    max-width: 106px !important;\n    margin: 0 auto !important;\n}\n\n\/* Same horizontal padding for header and rows *\/\n#mx-ranking-app .mx-ranking-header,\n#mx-ranking-app .mx-ranking-row {\n    padding-left: 14px !important;\n    padding-right: 14px !important;\n    box-sizing: border-box !important;\n}\n\n@media (max-width: 1450px) {\n    #mx-ranking-app .mx-ranking-header,\n    #mx-ranking-app .mx-ranking-row {\n        grid-template-columns:\n            58px\n            minmax(270px, 1.45fr)\n            100px\n            145px\n            135px\n            118px\n            110px !important;\n        column-gap: 10px !important;\n    }\n\n    #mx-ranking-app .mx-broker-layout {\n        grid-template-columns: 82px 145px !important;\n        column-gap: 10px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 82px !important;\n        min-width: 82px !important;\n        max-width: 82px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        max-width: 76px !important;\n    }\n\n    #mx-ranking-app .mx-broker-content {\n        width: 145px !important;\n        min-width: 145px !important;\n        max-width: 145px !important;\n    }\n}\n\n\n\n\/* =========================================================\n   FINAL EQUAL COLUMN SPACING\n========================================================= *\/\n\n\/* One uniform horizontal gap between every column *\/\n#mx-ranking-app .mx-ranking-header,\n#mx-ranking-app .mx-ranking-row {\n    column-gap: 24px !important;\n    grid-template-columns:\n        70px\n        minmax(300px, 1.65fr)\n        110px\n        155px\n        145px\n        125px\n        115px !important;\n}\n\n\/* Keep every header centered over its column *\/\n#mx-ranking-app .mx-ranking-header > div {\n    justify-content: center !important;\n    text-align: center !important;\n}\n\n\/* Broker stays centered as one logo+name block *\/\n#mx-ranking-app .mx-col-broker {\n    justify-content: center !important;\n}\n\n#mx-ranking-app .mx-broker-layout {\n    justify-content: center !important;\n    margin: 0 auto !important;\n}\n\n\/* Keep all data centered consistently *\/\n#mx-ranking-app .mx-col-rank,\n#mx-ranking-app .mx-col-score,\n#mx-ranking-app .mx-col-regulation,\n#mx-ranking-app .mx-col-trading,\n#mx-ranking-app .mx-col-popularity,\n#mx-ranking-app .mx-col-action {\n    justify-content: center !important;\n    text-align: center !important;\n}\n\n\/* Matching left\/right card padding *\/\n#mx-ranking-app .mx-ranking-header,\n#mx-ranking-app .mx-ranking-row {\n    padding-left: 18px !important;\n    padding-right: 18px !important;\n}\n\n@media (max-width: 1450px) {\n    #mx-ranking-app .mx-ranking-header,\n    #mx-ranking-app .mx-ranking-row {\n        column-gap: 16px !important;\n        grid-template-columns:\n            58px\n            minmax(260px, 1.55fr)\n            100px\n            145px\n            132px\n            115px\n            108px !important;\n    }\n}\n\n\n\n\/* =========================================================\n   TRUE EQUAL COLUMN GRID\n   7 equal-width columns = equal center-to-center spacing\n========================================================= *\/\n\n#mx-ranking-app .mx-ranking-header,\n#mx-ranking-app .mx-ranking-row {\n    grid-template-columns: repeat(7, minmax(0, 1fr)) !important;\n    column-gap: 20px !important;\n    padding-left: 18px !important;\n    padding-right: 18px !important;\n    box-sizing: border-box !important;\n}\n\n\/* Every header is centered over the exact same-width track *\/\n#mx-ranking-app .mx-ranking-header > div {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: center !important;\n    min-width: 0 !important;\n}\n\n\/* Rank *\/\n#mx-ranking-app .mx-col-rank {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    min-width: 0 !important;\n}\n\n\/* Broker: compact identity block that fits inside one equal column *\/\n#mx-ranking-app .mx-col-broker {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    min-width: 0 !important;\n    overflow: visible !important;\n}\n\n#mx-ranking-app .mx-broker-layout {\n    width: 100% !important;\n    max-width: 190px !important;\n    display: grid !important;\n    grid-template-columns: 72px minmax(0, 1fr) !important;\n    column-gap: 10px !important;\n    align-items: center !important;\n    justify-content: center !important;\n    margin: 0 auto !important;\n}\n\n#mx-ranking-app .mx-broker-logo-wrap {\n    width: 72px !important;\n    min-width: 72px !important;\n    max-width: 72px !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n}\n\n#mx-ranking-app .mx-broker-logo {\n    max-width: 68px !important;\n    max-height: 42px !important;\n    width: auto !important;\n    height: auto !important;\n    object-fit: contain !important;\n    margin: 0 auto !important;\n}\n\n#mx-ranking-app .mx-broker-content {\n    min-width: 0 !important;\n    width: 100% !important;\n    max-width: none !important;\n    display: flex !important;\n    flex-direction: column !important;\n    align-items: flex-start !important;\n    justify-content: center !important;\n}\n\n#mx-ranking-app .mx-broker-title-row {\n    width: 100% !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: flex-start !important;\n    flex-wrap: wrap !important;\n    gap: 4px !important;\n}\n\n#mx-ranking-app .mx-broker-name {\n    font-size: 12px !important;\n    line-height: 1.15 !important;\n    white-space: normal !important;\n    overflow: visible !important;\n    text-overflow: clip !important;\n    max-width: 100% !important;\n}\n\n#mx-ranking-app .mx-broker-features {\n    font-size: 8px !important;\n    line-height: 1.25 !important;\n}\n\n\/* All remaining columns use the exact center of their equal track *\/\n#mx-ranking-app .mx-col-score,\n#mx-ranking-app .mx-col-regulation,\n#mx-ranking-app .mx-col-trading,\n#mx-ranking-app .mx-col-popularity,\n#mx-ranking-app .mx-col-action {\n    display: flex !important;\n    flex-direction: column !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: center !important;\n    min-width: 0 !important;\n    width: 100% !important;\n}\n\n\/* Keep action buttons inside the equal Action track *\/\n#mx-ranking-app .mx-col-action {\n    gap: 6px !important;\n}\n\n#mx-ranking-app .mx-action-details,\n#mx-ranking-app .mx-action-compare {\n    width: auto !important;\n    min-width: 76px !important;\n    max-width: 92px !important;\n    margin: 0 auto !important;\n    padding: 7px 9px !important;\n}\n\n\/* Avoid long internal labels widening tracks visually *\/\n#mx-ranking-app .mx-col-score *,\n#mx-ranking-app .mx-col-regulation *,\n#mx-ranking-app .mx-col-trading *,\n#mx-ranking-app .mx-col-popularity *,\n#mx-ranking-app .mx-col-action * {\n    max-width: 100% !important;\n    box-sizing: border-box !important;\n}\n\n\/* Slightly tighter equal layout for narrower desktop widths *\/\n@media (max-width: 1450px) {\n    #mx-ranking-app .mx-ranking-header,\n    #mx-ranking-app .mx-ranking-row {\n        grid-template-columns: repeat(7, minmax(0, 1fr)) !important;\n        column-gap: 12px !important;\n    }\n\n    #mx-ranking-app .mx-broker-layout {\n        max-width: 165px !important;\n        grid-template-columns: 58px minmax(0, 1fr) !important;\n        column-gap: 8px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 58px !important;\n        min-width: 58px !important;\n        max-width: 58px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        max-width: 54px !important;\n    }\n\n    #mx-ranking-app .mx-broker-name {\n        font-size: 11px !important;\n    }\n}\n\n\n\n\/* =========================================================\n   PROPORTIONAL SIZE UPGRADE\n   Keeps the exact equal-column layout, only enlarges UI.\n========================================================= *\/\n\n\/* Overall row \/ header scale *\/\n#mx-ranking-app .mx-ranking-header {\n    min-height: 54px !important;\n}\n\n#mx-ranking-app .mx-ranking-row {\n    min-height: 138px !important;\n    padding-top: 20px !important;\n    padding-bottom: 20px !important;\n}\n\n\/* Header typography *\/\n#mx-ranking-app .mx-ranking-header > div {\n    font-size: 13px !important;\n    font-weight: 800 !important;\n}\n\n\/* Rank circle \/ number *\/\n#mx-ranking-app .mx-col-rank {\n    font-size: 14px !important;\n}\n\n#mx-ranking-app .mx-rank-number,\n#mx-ranking-app .mx-rank-badge {\n    transform: scale(1.14) !important;\n    transform-origin: center !important;\n}\n\n\/* Broker identity *\/\n#mx-ranking-app .mx-broker-layout {\n    max-width: 218px !important;\n    grid-template-columns: 84px minmax(0, 1fr) !important;\n    column-gap: 12px !important;\n}\n\n#mx-ranking-app .mx-broker-logo-wrap {\n    width: 84px !important;\n    min-width: 84px !important;\n    max-width: 84px !important;\n}\n\n#mx-ranking-app .mx-broker-logo {\n    max-width: 80px !important;\n    max-height: 52px !important;\n}\n\n#mx-ranking-app .mx-broker-name {\n    font-size: 14px !important;\n    line-height: 1.18 !important;\n}\n\n#mx-ranking-app .mx-broker-features {\n    font-size: 9px !important;\n    line-height: 1.35 !important;\n}\n\n#mx-ranking-app .mx-verified-badge,\n#mx-ranking-app .mx-verified {\n    font-size: 8px !important;\n    padding: 3px 6px !important;\n}\n\n\/* Score *\/\n#mx-ranking-app .mx-score-value,\n#mx-ranking-app .mx-col-score > strong,\n#mx-ranking-app .mx-col-score .mx-score {\n    font-size: 16px !important;\n}\n\n#mx-ranking-app .mx-score-stars,\n#mx-ranking-app .mx-stars {\n    font-size: 12px !important;\n}\n\n#mx-ranking-app .mx-col-score .mx-ai-ranking,\n#mx-ranking-app .mx-col-score .mx-source-badge,\n#mx-ranking-app .mx-col-score span {\n    font-size: 9px !important;\n}\n\n\/* Regulation *\/\n#mx-ranking-app .mx-col-regulation {\n    font-size: 11px !important;\n}\n\n#mx-ranking-app .mx-license-count,\n#mx-ranking-app .mx-col-regulation > strong {\n    font-size: 14px !important;\n}\n\n#mx-ranking-app .mx-regulated-badge,\n#mx-ranking-app .mx-regulation-status {\n    font-size: 10px !important;\n    padding: 7px 12px !important;\n}\n\n#mx-ranking-app .mx-regulator-chip {\n    font-size: 9px !important;\n    min-height: 26px !important;\n    padding: 5px 8px !important;\n}\n\n\/* Trading environment *\/\n#mx-ranking-app .mx-col-trading {\n    font-size: 11px !important;\n}\n\n#mx-ranking-app .mx-trading-grade,\n#mx-ranking-app .mx-col-trading > strong {\n    font-size: 14px !important;\n}\n\n#mx-ranking-app .mx-trading-badge,\n#mx-ranking-app .mx-grade-badge {\n    font-size: 10px !important;\n    padding: 7px 11px !important;\n}\n\n\/* Popularity *\/\n#mx-ranking-app .mx-col-popularity {\n    font-size: 11px !important;\n}\n\n#mx-ranking-app .mx-popularity-value,\n#mx-ranking-app .mx-col-popularity > strong {\n    font-size: 14px !important;\n}\n\n#mx-ranking-app .mx-popularity-bar,\n#mx-ranking-app .mx-popularity-track {\n    transform: scaleX(1.08) !important;\n    transform-origin: center !important;\n}\n\n#mx-ranking-app .mx-influence-badge {\n    font-size: 10px !important;\n    padding: 7px 11px !important;\n}\n\n\/* Action buttons *\/\n#mx-ranking-app .mx-action-details,\n#mx-ranking-app .mx-action-compare {\n    min-width: 88px !important;\n    max-width: 104px !important;\n    min-height: 34px !important;\n    padding: 9px 11px !important;\n    font-size: 11px !important;\n    border-radius: 7px !important;\n}\n\n\/* Ranking tabs *\/\n#mx-ranking-app .mx-rank-tabs button {\n    min-height: 46px !important;\n    font-size: 12px !important;\n    padding: 10px 14px !important;\n}\n\n\/* Toolbar *\/\n#mx-ranking-app .mx-rank-toolbar {\n    min-height: 48px !important;\n}\n\n#mx-ranking-app .mx-category-button,\n#mx-ranking-app #mx-filter-toggle {\n    min-height: 38px !important;\n    font-size: 11px !important;\n    padding: 8px 12px !important;\n}\n\n#mx-ranking-app .mx-last-update {\n    font-size: 10px !important;\n}\n\n\/* Filter sidebar: enlarge proportionally without changing structure *\/\n#mx-ranking-app .mx-filter-card-head {\n    min-height: 44px !important;\n    padding: 12px 14px !important;\n    font-size: 12px !important;\n}\n\n#mx-ranking-app .mx-filter-card-body {\n    padding: 12px 14px 15px !important;\n}\n\n#mx-ranking-app .mx-filter-field > span,\n#mx-ranking-app .mx-filter-sidebar .mx-check-label {\n    font-size: 11px !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar input[type=\"text\"],\n#mx-ranking-app .mx-list-search {\n    min-height: 38px !important;\n    font-size: 11px !important;\n    padding: 8px 10px !important;\n}\n\n#mx-ranking-app .mx-list-option {\n    font-size: 11px !important;\n    padding: 6px 0 !important;\n}\n\n#mx-ranking-app .mx-list-option::before {\n    width: 14px !important;\n    height: 14px !important;\n    flex-basis: 14px !important;\n}\n\n#mx-ranking-app .mx-filter-actions button {\n    min-height: 40px !important;\n    font-size: 11px !important;\n}\n\n\/* Slight sidebar width increase for larger contents *\/\n#mx-ranking-app .mx-ranking-content {\n    grid-template-columns: minmax(0, 1fr) 340px !important;\n    gap: 24px !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar,\n#mx-ranking-app #mx-filter-panel {\n    width: 340px !important;\n    max-width: 340px !important;\n}\n\n\/* Preserve equal spacing on narrower desktop *\/\n@media (max-width: 1450px) {\n    #mx-ranking-app .mx-ranking-content {\n        grid-template-columns: minmax(0, 1fr) 310px !important;\n        gap: 18px !important;\n    }\n\n    #mx-ranking-app .mx-filter-sidebar,\n    #mx-ranking-app #mx-filter-panel {\n        width: 310px !important;\n        max-width: 310px !important;\n    }\n\n    #mx-ranking-app .mx-broker-layout {\n        max-width: 190px !important;\n        grid-template-columns: 70px minmax(0, 1fr) !important;\n        column-gap: 9px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 70px !important;\n        min-width: 70px !important;\n        max-width: 70px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        max-width: 66px !important;\n        max-height: 46px !important;\n    }\n\n    #mx-ranking-app .mx-broker-name {\n        font-size: 13px !important;\n    }\n}\n\n\n\n\/* =========================================================\n   STRONG SIZE UPGRADE \u2014 LOGOS + TEXT\n   Keeps the current equal-column layout unchanged.\n========================================================= *\/\n\n\/* Broker column \u2014 significantly larger logo *\/\n#mx-ranking-app .mx-broker-layout {\n    max-width: 235px !important;\n    grid-template-columns: 112px minmax(0, 1fr) !important;\n    column-gap: 14px !important;\n}\n\n#mx-ranking-app .mx-broker-logo-wrap {\n    width: 112px !important;\n    min-width: 112px !important;\n    max-width: 112px !important;\n    height: 70px !important;\n    min-height: 70px !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    overflow: visible !important;\n}\n\n#mx-ranking-app .mx-broker-logo {\n    width: auto !important;\n    height: auto !important;\n    max-width: 108px !important;\n    max-height: 64px !important;\n    object-fit: contain !important;\n    transform: scale(1.08) !important;\n    transform-origin: center !important;\n}\n\n\/* Bigger broker text *\/\n#mx-ranking-app .mx-broker-name {\n    font-size: 16px !important;\n    font-weight: 800 !important;\n    line-height: 1.2 !important;\n}\n\n#mx-ranking-app .mx-broker-features {\n    font-size: 10px !important;\n    line-height: 1.4 !important;\n}\n\n#mx-ranking-app .mx-verified-badge,\n#mx-ranking-app .mx-verified {\n    font-size: 9px !important;\n    padding: 3px 6px !important;\n}\n\n\/* Bigger column headings *\/\n#mx-ranking-app .mx-ranking-header > div {\n    font-size: 14px !important;\n    font-weight: 800 !important;\n}\n\n\/* Bigger row content *\/\n#mx-ranking-app .mx-score-value,\n#mx-ranking-app .mx-col-score .mx-score,\n#mx-ranking-app .mx-col-score > strong {\n    font-size: 18px !important;\n}\n\n#mx-ranking-app .mx-license-count,\n#mx-ranking-app .mx-col-regulation > strong {\n    font-size: 16px !important;\n}\n\n#mx-ranking-app .mx-trading-grade,\n#mx-ranking-app .mx-col-trading > strong {\n    font-size: 16px !important;\n}\n\n#mx-ranking-app .mx-popularity-value,\n#mx-ranking-app .mx-col-popularity > strong {\n    font-size: 16px !important;\n}\n\n#mx-ranking-app .mx-score-stars,\n#mx-ranking-app .mx-stars {\n    font-size: 13px !important;\n}\n\n\/* Bigger badges\/chips *\/\n#mx-ranking-app .mx-regulated-badge,\n#mx-ranking-app .mx-regulation-status,\n#mx-ranking-app .mx-trading-badge,\n#mx-ranking-app .mx-grade-badge,\n#mx-ranking-app .mx-influence-badge,\n#mx-ranking-app .mx-ai-ranking,\n#mx-ranking-app .mx-source-badge {\n    font-size: 10px !important;\n}\n\n#mx-ranking-app .mx-regulator-chip {\n    font-size: 9px !important;\n    min-height: 28px !important;\n    padding: 6px 9px !important;\n}\n\n\/* Bigger buttons *\/\n#mx-ranking-app .mx-action-details,\n#mx-ranking-app .mx-action-compare {\n    min-width: 92px !important;\n    min-height: 36px !important;\n    font-size: 12px !important;\n    padding: 9px 12px !important;\n}\n\n\/* Taller cards so larger content has room *\/\n#mx-ranking-app .mx-ranking-row {\n    min-height: 154px !important;\n    padding-top: 22px !important;\n    padding-bottom: 22px !important;\n}\n\n\/* Slightly larger rank circle *\/\n#mx-ranking-app .mx-rank-number,\n#mx-ranking-app .mx-rank-badge {\n    transform: scale(1.18) !important;\n    transform-origin: center !important;\n}\n\n\/* If any legacy rule tries to shrink broker images, neutralize it *\/\n#mx-ranking-app img.mx-broker-logo,\n#mx-ranking-app .mx-broker-logo-wrap img {\n    min-width: 72px !important;\n    min-height: 28px !important;\n}\n\n\/* Desktop fallback *\/\n@media (max-width: 1450px) {\n    #mx-ranking-app .mx-broker-layout {\n        max-width: 210px !important;\n        grid-template-columns: 96px minmax(0, 1fr) !important;\n        column-gap: 12px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 96px !important;\n        min-width: 96px !important;\n        max-width: 96px !important;\n        height: 62px !important;\n        min-height: 62px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        max-width: 92px !important;\n        max-height: 56px !important;\n        transform: scale(1.06) !important;\n    }\n\n    #mx-ranking-app .mx-broker-name {\n        font-size: 15px !important;\n    }\n}\n\n\n\n\/* =========================================================\n   FINAL DROPDOWN RULES\n   - KEEP ranking\/category algorithm dropdown\n   - NO dropdowns inside right filter\n   - ALL broker rows visible; no Load More\n========================================================= *\/\n\n\/* Filter sections always open *\/\n#mx-ranking-app .mx-filter-card-head {\n    cursor: default !important;\n    pointer-events: none !important;\n}\n\n#mx-ranking-app .mx-filter-chevron {\n    display: none !important;\n}\n\n#mx-ranking-app .mx-filter-card-body,\n#mx-ranking-app .mx-filter-card.open .mx-filter-card-body {\n    display: block !important;\n}\n\n\/* Hide only FILTER dropdown controls. Do NOT touch category\/algorithm dropdown. *\/\n#mx-ranking-app #mx-filter-panel .mx-native-hidden-select,\n#mx-ranking-app #mx-filter-panel .mx-custom-select,\n#mx-ranking-app #mx-filter-panel .mx-custom-select-button,\n#mx-ranking-app #mx-filter-panel .mx-custom-select-menu,\n#mx-ranking-app #mx-filter-panel .mx-sidebar-select {\n    display: none !important;\n}\n\n\/* Always-visible filter option lists *\/\n#mx-ranking-app #mx-filter-panel .mx-list-select {\n    display: block !important;\n}\n\n#mx-ranking-app #mx-filter-panel .mx-list-options {\n    display: block !important;\n    max-height: none !important;\n    overflow: visible !important;\n    margin-top: 8px !important;\n}\n\n#mx-ranking-app #mx-filter-panel .mx-list-option {\n    display: flex !important;\n    align-items: center !important;\n    gap: 8px !important;\n    width: 100% !important;\n    padding: 6px 0 !important;\n    border: 0 !important;\n    background: transparent !important;\n    color: #CBD5E1 !important;\n    font-size: 11px !important;\n    text-align: left !important;\n    cursor: pointer !important;\n}\n\n#mx-ranking-app #mx-filter-panel .mx-list-option::before {\n    content: \"\" !important;\n    width: 14px !important;\n    height: 14px !important;\n    flex: 0 0 14px !important;\n    border: 1px solid #526276 !important;\n    border-radius: 2px !important;\n    background: #02060C !important;\n    box-sizing: border-box !important;\n}\n\n#mx-ranking-app #mx-filter-panel .mx-list-option.active::before {\n    border-color: #07DFE2 !important;\n    background: #07DFE2 !important;\n    box-shadow: inset 0 0 0 3px #02060C !important;\n}\n\n#mx-ranking-app #mx-filter-panel .mx-list-option.active {\n    color: #FFFFFF !important;\n    font-weight: 700 !important;\n}\n\n#mx-ranking-app #mx-filter-panel .mx-list-search {\n    width: 100% !important;\n    min-height: 38px !important;\n    padding: 8px 10px !important;\n    border: 1px solid #253B59 !important;\n    border-radius: 6px !important;\n    background: #02060C !important;\n    color: #FFFFFF !important;\n    outline: none !important;\n}\n\n\/* Load More must never show *\/\n#mx-ranking-app .mx-load-more-wrap,\n#mx-ranking-app #mx-load-more,\n#mx-ranking-app .mx-load-more {\n    display: none !important;\n}\n\n\n\n\/* =========================================================\n   FILTER PAGE FLOW + IRANBROKER-STYLE EXTENDED SECTIONS\n========================================================= *\/\n\n\/* Remove internal filter scrollbar completely.\n   The normal page scrollbar handles the whole page. *\/\n#mx-ranking-app .mx-filter-sidebar,\n#mx-ranking-app #mx-filter-panel {\n    position: static !important;\n    top: auto !important;\n    max-height: none !important;\n    height: auto !important;\n    overflow: visible !important;\n    scrollbar-width: none !important;\n}\n\n#mx-ranking-app .mx-filter-sidebar::-webkit-scrollbar,\n#mx-ranking-app #mx-filter-panel::-webkit-scrollbar {\n    display: none !important;\n    width: 0 !important;\n    height: 0 !important;\n}\n\n\/* Filter actions should also flow naturally at the end. *\/\n#mx-ranking-app .mx-filter-actions {\n    position: static !important;\n    bottom: auto !important;\n}\n\n\/* Extended lists *\/\n#mx-ranking-app .mx-static-filter-list {\n    display: block !important;\n}\n\n#mx-ranking-app .mx-static-filter-list .mx-check {\n    min-height: 30px !important;\n    padding: 5px 0 !important;\n}\n\n#mx-ranking-app .mx-static-search {\n    margin-bottom: 8px !important;\n}\n\n\/* Radio controls visually match checkbox list style *\/\n#mx-ranking-app .mx-static-filter-list input[type=\"radio\"] {\n    position: absolute !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n}\n\n#mx-ranking-app .mx-static-filter-list input[type=\"radio\"]:checked + .mx-check-box {\n    border-color: #07DFE2 !important;\n    background: #07DFE2 !important;\n}\n\n#mx-ranking-app .mx-static-filter-list input[type=\"radio\"]:checked + .mx-check-box::after {\n    content: \"\u2713\" !important;\n    color: #001113 !important;\n    font-size: 10px !important;\n    font-weight: 900 !important;\n}\n\n\/* Longer lists can extend naturally, exactly like the reference page. *\/\n#mx-ranking-app #mx-filter-panel .mx-list-options {\n    max-height: none !important;\n    overflow: visible !important;\n}\n\n\n\n\/* =========================================================\n   VERIFIED BADGE \u2014 OWN ROW BESIDE BROKER NAME\n========================================================= *\/\n\n#mx-ranking-app .mx-broker-title-row {\n    display: grid !important;\n    grid-template-columns: minmax(0, auto) auto !important;\n    grid-template-rows: auto auto !important;\n    align-items: start !important;\n    justify-content: start !important;\n    column-gap: 8px !important;\n    row-gap: 4px !important;\n    width: 100% !important;\n}\n\n#mx-ranking-app .mx-broker-name {\n    grid-column: 1 !important;\n    grid-row: 1 !important;\n    align-self: center !important;\n    margin: 0 !important;\n}\n\n#mx-ranking-app .mx-verified-badge,\n#mx-ranking-app .mx-verified,\n#mx-ranking-app .verified-badge {\n    grid-column: 2 !important;\n    grid-row: 2 !important;\n    justify-self: start !important;\n    align-self: start !important;\n    margin: 0 !important;\n    white-space: nowrap !important;\n}\n\n\/* Keep broker features below the name block *\/\n#mx-ranking-app .mx-broker-features {\n    margin-top: 4px !important;\n}\n\n\n\n\/* =========================================================\n   MICRO ALIGNMENT FIX\n   - More space between Broker Name and VERIFIED\n   - Ranking number moved further left\n========================================================= *\/\n\n\/* Give VERIFIED more breathing room from broker name *\/\n#mx-ranking-app .mx-broker-title-row {\n    column-gap: 18px !important;\n}\n\n#mx-ranking-app .mx-verified-badge,\n#mx-ranking-app .mx-verified,\n#mx-ranking-app .verified-badge {\n    margin-left: 8px !important;\n}\n\n\/* Move ranking number further left inside Rank column *\/\n#mx-ranking-app .mx-col-rank {\n    justify-content: flex-start !important;\n    padding-left: 8px !important;\n}\n\n#mx-ranking-app .mx-rank-number,\n#mx-ranking-app .mx-rank-badge {\n    margin-left: 0 !important;\n    margin-right: auto !important;\n}\n\n\n\n\/* =========================================================\n   BROKER COLUMN MICRO-SHIFT\n   Move only logo + broker identity closer to Rank.\n========================================================= *\/\n\n#mx-ranking-app .mx-col-broker .mx-broker-layout {\n    transform: translateX(-44px) !important;\n}\n\n\/* Keep VERIFIED attached to broker name *\/\n#mx-ranking-app .mx-broker-title-row {\n    column-gap: 18px !important;\n}\n\n\/* Slightly smaller shift on narrower desktop *\/\n@media (max-width: 1450px) {\n    #mx-ranking-app .mx-col-broker .mx-broker-layout {\n        transform: translateX(-30px) !important;\n    }\n}\n\n\n\n\/* =========================================================\n   FINAL FIX: MAKE ALL COLUMN GAPS VISUALLY EQUAL\n========================================================= *\/\n#mx-ranking-app .mx-ranking-header,\n#mx-ranking-app .mx-ranking-row {\n    display: grid !important;\n    grid-template-columns: repeat(7, minmax(0, 1fr)) !important;\n    column-gap: 22px !important;\n    align-items: center !important;\n    padding-left: 18px !important;\n    padding-right: 18px !important;\n    box-sizing: border-box !important;\n}\n\n#mx-ranking-app .mx-ranking-header > div,\n#mx-ranking-app .mx-col-rank,\n#mx-ranking-app .mx-col-broker,\n#mx-ranking-app .mx-col-score,\n#mx-ranking-app .mx-col-regulation,\n#mx-ranking-app .mx-col-trading,\n#mx-ranking-app .mx-col-popularity,\n#mx-ranking-app .mx-col-action {\n    width: 100% !important;\n    min-width: 0 !important;\n    justify-self: center !important;\n}\n\n#mx-ranking-app .mx-ranking-header > div {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: center !important;\n}\n\n#mx-ranking-app .mx-col-rank,\n#mx-ranking-app .mx-col-score,\n#mx-ranking-app .mx-col-regulation,\n#mx-ranking-app .mx-col-trading,\n#mx-ranking-app .mx-col-popularity,\n#mx-ranking-app .mx-col-action {\n    display: flex !important;\n    flex-direction: column !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: center !important;\n}\n\n\/* Broker column kept compact so its center aligns like all other columns *\/\n#mx-ranking-app .mx-col-broker {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: left !important;\n}\n\n#mx-ranking-app .mx-broker-layout {\n    width: 100% !important;\n    max-width: 220px !important;\n    margin: 0 auto !important;\n    display: grid !important;\n    grid-template-columns: 84px minmax(0, 1fr) !important;\n    column-gap: 12px !important;\n    align-items: center !important;\n}\n\n#mx-ranking-app .mx-broker-logo-wrap {\n    width: 84px !important;\n    min-width: 84px !important;\n    max-width: 84px !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n}\n\n#mx-ranking-app .mx-broker-logo {\n    max-width: 78px !important;\n    max-height: 50px !important;\n    width: auto !important;\n    height: auto !important;\n    object-fit: contain !important;\n}\n\n#mx-ranking-app .mx-broker-content {\n    min-width: 0 !important;\n    display: flex !important;\n    flex-direction: column !important;\n    align-items: flex-start !important;\n    justify-content: center !important;\n}\n\n#mx-ranking-app .mx-broker-title-row {\n    width: 100% !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: flex-start !important;\n    gap: 8px !important;\n    flex-wrap: nowrap !important;\n}\n\n#mx-ranking-app .mx-broker-name {\n    max-width: 100% !important;\n    white-space: normal !important;\n}\n\n#mx-ranking-app .mx-action-details,\n#mx-ranking-app .mx-action-compare {\n    margin-left: auto !important;\n    margin-right: auto !important;\n}\n\n@media (max-width: 1450px) {\n    #mx-ranking-app .mx-ranking-header,\n    #mx-ranking-app .mx-ranking-row {\n        grid-template-columns: repeat(7, minmax(0, 1fr)) !important;\n        column-gap: 14px !important;\n    }\n\n    #mx-ranking-app .mx-broker-layout {\n        max-width: 190px !important;\n        grid-template-columns: 68px minmax(0, 1fr) !important;\n        column-gap: 10px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 68px !important;\n        min-width: 68px !important;\n        max-width: 68px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo {\n        max-width: 62px !important;\n        max-height: 42px !important;\n    }\n}\n\n\n\n\/* =========================================================\n   VERIFIED AS ITS OWN COLUMN\n========================================================= *\/\n\n\/* 8 true equal-width columns:\n   Rank | Broker | Verified | Score | Regulation | Trading ENV | Popularity | Action *\/\n#mx-ranking-app .mx-ranking-header,\n#mx-ranking-app .mx-ranking-row {\n    grid-template-columns: repeat(8, minmax(0, 1fr)) !important;\n    column-gap: 20px !important;\n}\n\n\/* Every header and cell uses the center of its own equal track *\/\n#mx-ranking-app .mx-ranking-header > div,\n#mx-ranking-app .mx-col-rank,\n#mx-ranking-app .mx-col-broker,\n#mx-ranking-app .mx-col-verified,\n#mx-ranking-app .mx-col-score,\n#mx-ranking-app .mx-col-regulation,\n#mx-ranking-app .mx-col-trading,\n#mx-ranking-app .mx-col-popularity,\n#mx-ranking-app .mx-col-action {\n    min-width: 0 !important;\n    width: 100% !important;\n}\n\n\/* Dedicated Verified column *\/\n#mx-ranking-app .mx-col-verified {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: center !important;\n}\n\n\/* Give VERIFIED a clear visual separation from broker identity *\/\n#mx-ranking-app .mx-col-broker {\n    padding-right: 8px !important;\n}\n\n#mx-ranking-app .mx-col-verified {\n    padding-left: 8px !important;\n}\n\n\/* Broker title no longer needs room for the verification badge *\/\n#mx-ranking-app .mx-broker-title-row {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: flex-start !important;\n    flex-wrap: wrap !important;\n    gap: 0 !important;\n}\n\n\/* Verified badge stays centered in its own column *\/\n#mx-ranking-app .mx-col-verified .mx-broker-verified {\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    margin: 0 auto !important;\n    white-space: nowrap !important;\n}\n\n\/* On narrower desktop preserve equal spacing across all 8 columns *\/\n@media (max-width: 1450px) {\n    #mx-ranking-app .mx-ranking-header,\n    #mx-ranking-app .mx-ranking-row {\n        grid-template-columns: repeat(8, minmax(0, 1fr)) !important;\n        column-gap: 12px !important;\n    }\n\n    #mx-ranking-app .mx-col-broker {\n        padding-right: 5px !important;\n    }\n\n    #mx-ranking-app .mx-col-verified {\n        padding-left: 5px !important;\n    }\n}\n\n\n\n\/* =========================================================\n   VERIFICATION \/ RISK STATUS COLORS\n========================================================= *\/\n\n#mx-ranking-app .mx-broker-verified {\n    min-width: 82px !important;\n    min-height: 28px !important;\n    padding: 6px 9px !important;\n    border-radius: 6px !important;\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    font-size: 9px !important;\n    font-weight: 800 !important;\n    letter-spacing: .25px !important;\n    white-space: nowrap !important;\n}\n\n#mx-ranking-app .mx-broker-verified.is-verified {\n    color: #66F2B4 !important;\n    border: 1px solid rgba(102,242,180,.55) !important;\n    background: rgba(41,155,104,.13) !important;\n}\n\n#mx-ranking-app .mx-broker-verified.is-high-risk {\n    color: #FFB44A !important;\n    border: 1px solid rgba(255,180,74,.62) !important;\n    background: rgba(255,180,74,.10) !important;\n}\n\n#mx-ranking-app .mx-broker-verified.is-unregulated {\n    color: #FF8A65 !important;\n    border: 1px solid rgba(255,138,101,.62) !important;\n    background: rgba(255,138,101,.10) !important;\n}\n\n#mx-ranking-app .mx-broker-verified.is-rejected {\n    color: #FF5C72 !important;\n    border: 1px solid rgba(255,92,114,.68) !important;\n    background: rgba(255,92,114,.11) !important;\n}\n\n#mx-ranking-app .mx-broker-verified.is-unverified {\n    color: #AAB4C0 !important;\n    border: 1px solid rgba(170,180,192,.42) !important;\n    background: rgba(170,180,192,.07) !important;\n}\n\n\/* =========================================================\n   LOGO VISIBILITY FIX FOR DARK \/ BLACK LOGOS\n========================================================= *\/\n#mx-ranking-app .mx-broker-logo-wrap {\n    background: linear-gradient(180deg, rgba(255,255,255,0.055), rgba(255,255,255,0.035)) !important;\n    border: 1px solid rgba(140, 230, 232, 0.12) !important;\n    border-radius: 12px !important;\n    padding: 10px !important;\n    box-shadow: inset 0 0 0 1px rgba(255,255,255,0.02) !important;\n}\n\n#mx-ranking-app .mx-broker-logo {\n    filter: drop-shadow(0 0 1px rgba(255,255,255,0.55)) drop-shadow(0 1px 4px rgba(0,0,0,0.35)) !important;\n}\n\n#mx-ranking-app .mx-broker-logo[src*=\"svg\"],\n#mx-ranking-app .mx-broker-logo-wrap img {\n    background: transparent !important;\n}\n\n@media (max-width: 991px) {\n    #mx-ranking-app .mx-broker-logo-wrap {\n        padding: 8px !important;\n    }\n}\n\/* =========================================================\n   CENTERED + CLEAR LOGO FIX\n========================================================= *\/\n#mx-ranking-app .mx-broker-logo-wrap {\n    width: 112px !important;\n    height: 72px !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: center !important;\n    padding: 12px !important;\n    overflow: hidden !important;\n    background: radial-gradient(circle at center, rgba(255,255,255,0.16) 0%, rgba(255,255,255,0.11) 46%, rgba(255,255,255,0.06) 100%) !important;\n    border: 1px solid rgba(140, 230, 232, 0.16) !important;\n    border-radius: 14px !important;\n    box-shadow: inset 0 0 0 1px rgba(255,255,255,0.03), 0 6px 18px rgba(0,0,0,0.18) !important;\n}\n\n#mx-ranking-app .mx-broker-logo,\n#mx-ranking-app .mx-broker-logo-wrap img {\n    display: block !important;\n    width: auto !important;\n    height: auto !important;\n    max-width: 92px !important;\n    max-height: 44px !important;\n    margin: 0 auto !important;\n    object-fit: contain !important;\n    object-position: center center !important;\n    filter: drop-shadow(0 0 1px rgba(255,255,255,0.72)) drop-shadow(0 2px 6px rgba(0,0,0,0.32)) !important;\n}\n\n#mx-ranking-app .mx-broker-logo-placeholder {\n    margin: 0 auto !important;\n}\n\n@media (max-width: 991px) {\n    #mx-ranking-app .mx-broker-logo-wrap {\n        width: 102px !important;\n        height: 66px !important;\n        padding: 10px !important;\n    }\n\n    #mx-ranking-app .mx-broker-logo,\n    #mx-ranking-app .mx-broker-logo-wrap img {\n        max-width: 84px !important;\n        max-height: 40px !important;\n    }\n}\n\/* =========================================================\n   FILTER SIDEBAR TOP ALIGNMENT WITH BROKER ROWS\n========================================================= *\/\n#mx-ranking-app .mx-filter-sidebar,\n#mx-ranking-app #mx-filter-panel {\n    align-self: start !important;\n    margin-top: 0 !important;\n}\n\n\/* =========================================================\n   LARGER + BOLDER TOP RANKING TAB LABELS\n========================================================= *\/\n#mx-ranking-app .mx-rank-tabs button {\n    font-size: 15px !important;\n    font-weight: 800 !important;\n    letter-spacing: 0.1px !important;\n}\n\n@media (min-width: 1200px) {\n    #mx-ranking-app .mx-rank-tabs button {\n        font-size: 16px !important;\n        font-weight: 800 !important;\n    }\n}\n\n\n\/* =========================================================\n   LIVE FILTER ACTION BAR \u2014 RESET ONLY\n========================================================= *\/\n#mx-ranking-app .mx-filter-actions {\n    grid-template-columns: 1fr !important;\n}\n\n#mx-ranking-app #mx-filter-reset {\n    width: 100% !important;\n    min-height: 42px !important;\n    font-weight: 800 !important;\n}\n\n#mx-ranking-app #mx-filter-apply {\n    display: none !important;\n}\n\n<\/style>\n\n<script>\n(function () {\n    function ready(fn) {\n        if (document.readyState === \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", fn);\n        } else {\n            fn();\n        }\n    }\n\n    ready(function () {\n        const app = document.getElementById(\"mx-ranking-app\");\n        if (!app) return;\n\n        \/* Keep all filter sections permanently open *\/\n        app.querySelectorAll(\".mx-filter-card\").forEach(function (card) {\n            card.classList.add(\"open\");\n            const head = card.querySelector(\".mx-filter-card-head\");\n            if (head) head.setAttribute(\"aria-expanded\", \"true\");\n            const body = card.querySelector(\".mx-filter-card-body\");\n            if (body) body.style.display = \"block\";\n        });\n\n        function syncGroup(select, wrap) {\n            if (!select || !wrap) return;\n            const current = String(select.value || \"\");\n            wrap.querySelectorAll(\".mx-list-option\").forEach(function (btn) {\n                btn.classList.toggle(\"active\", btn.dataset.value === current);\n            });\n        }\n\n        function buildList(selectId, opts) {\n            const select = document.getElementById(selectId);\n            if (!select) return;\n\n            const field = select.closest(\".mx-filter-field\");\n            if (!field) return;\n\n            const old = field.querySelector('.mx-list-select[data-source=\"' + selectId + '\"]');\n            if (old) old.remove();\n\n            const box = document.createElement(\"div\");\n            box.className = \"mx-list-select\";\n            box.dataset.source = selectId;\n\n            if (opts && opts.searchable) {\n                const search = document.createElement(\"input\");\n                search.type = \"text\";\n                search.className = \"mx-list-search\";\n                search.placeholder = opts.placeholder || \"Search...\";\n                box.appendChild(search);\n\n                search.addEventListener(\"input\", function () {\n                    const q = search.value.trim().toLowerCase();\n                    box.querySelectorAll(\".mx-list-option\").forEach(function (btn) {\n                        const text = btn.textContent.trim().toLowerCase();\n                        btn.style.display = text.includes(q) ? \"flex\" : \"none\";\n                    });\n                });\n            }\n\n            const list = document.createElement(\"div\");\n            list.className = \"mx-list-options\" + (opts && opts.compact ? \" compact\" : \"\");\n            box.appendChild(list);\n\n            Array.from(select.options).forEach(function (opt) {\n                const btn = document.createElement(\"button\");\n                btn.type = \"button\";\n                btn.className = \"mx-list-option\";\n                btn.dataset.value = opt.value;\n\n                const label = document.createElement(\"span\");\n                label.className = \"mx-list-option-label\";\n                label.textContent = opt.textContent.trim();\n                btn.appendChild(label);\n\n                btn.addEventListener(\"click\", function () {\n                    select.value = opt.value;\n                    syncGroup(select, box);\n                });\n\n                list.appendChild(btn);\n            });\n\n            field.appendChild(box);\n            syncGroup(select, box);\n        }\n\n        buildList(\"mx-filter-score\", { compact: true });\n        buildList(\"mx-filter-country\", {\n            searchable: true,\n            placeholder: \"Search countries...\"\n        });\n        buildList(\"mx-filter-licenses\", { compact: true });\n        buildList(\"mx-filter-trading-grade\", { compact: true });\n        buildList(\"mx-filter-popularity\", { compact: true });\n\n        \/* Country list may populate after API response *\/\n        const countrySelect = document.getElementById(\"mx-filter-country\");\n        if (countrySelect && window.MutationObserver) {\n            let count = countrySelect.options.length;\n            new MutationObserver(function () {\n                if (countrySelect.options.length !== count) {\n                    count = countrySelect.options.length;\n                    buildList(\"mx-filter-country\", {\n                        searchable: true,\n                        placeholder: \"Search countries...\"\n                    });\n                }\n            }).observe(countrySelect, { childList: true, subtree: true });\n        }\n\n        \/* Keep visual selection synced after reset *\/\n        const reset = document.getElementById(\"mx-filter-reset\");\n        if (reset) {\n            reset.addEventListener(\"click\", function () {\n                setTimeout(function () {\n                    [\n                        \"mx-filter-score\",\n                        \"mx-filter-country\",\n                        \"mx-filter-licenses\",\n                        \"mx-filter-trading-grade\",\n                        \"mx-filter-popularity\"\n                    ].forEach(function (id) {\n                        const select = document.getElementById(id);\n                        const wrap = app.querySelector('.mx-list-select[data-source=\"' + id + '\"]');\n                        syncGroup(select, wrap);\n                    });\n                }, 0);\n            });\n        }\n    });\n})();\n<\/script>\n\n\n\n<script>\n(function () {\n    function ready(fn) {\n        if (document.readyState === \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", fn);\n        } else {\n            fn();\n        }\n    }\n\n    ready(function () {\n        const app = document.getElementById(\"mx-ranking-app\");\n        const panel = document.getElementById(\"mx-filter-panel\");\n        if (!app || !panel) return;\n\n        \/* Keep filter cards permanently open. *\/\n        panel.querySelectorAll(\".mx-filter-card\").forEach(function (card) {\n            card.classList.add(\"open\");\n\n            const head = card.querySelector(\".mx-filter-card-head\");\n            if (head) head.setAttribute(\"aria-expanded\", \"true\");\n\n            const body = card.querySelector(\".mx-filter-card-body\");\n            if (body) body.style.display = \"block\";\n        });\n\n        function syncGroup(select, box) {\n            if (!select || !box) return;\n\n            const current = String(select.value || \"\");\n\n            box.querySelectorAll(\".mx-list-option\").forEach(function (button) {\n                button.classList.toggle(\n                    \"active\",\n                    button.dataset.value === current\n                );\n            });\n        }\n\n        function buildFilterList(selectId, searchable) {\n            const select = document.getElementById(selectId);\n            if (!select || !panel.contains(select)) return;\n\n            const field = select.closest(\".mx-filter-field\");\n            if (!field) return;\n\n            const existing = field.querySelector(\n                '.mx-list-select[data-source=\"' + selectId + '\"]'\n            );\n\n            if (existing) existing.remove();\n\n            const box = document.createElement(\"div\");\n            box.className = \"mx-list-select\";\n            box.dataset.source = selectId;\n\n            if (searchable) {\n                const search = document.createElement(\"input\");\n                search.type = \"text\";\n                search.className = \"mx-list-search\";\n                search.placeholder = \"Search...\";\n                box.appendChild(search);\n\n                search.addEventListener(\"input\", function () {\n                    const q = search.value.trim().toLowerCase();\n\n                    box.querySelectorAll(\".mx-list-option\").forEach(function (button) {\n                        const txt = button.textContent.trim().toLowerCase();\n                        button.style.display = txt.includes(q) ? \"flex\" : \"none\";\n                    });\n                });\n            }\n\n            const list = document.createElement(\"div\");\n            list.className = \"mx-list-options\";\n            box.appendChild(list);\n\n            Array.from(select.options).forEach(function (option) {\n                const button = document.createElement(\"button\");\n                button.type = \"button\";\n                button.className = \"mx-list-option\";\n                button.dataset.value = option.value;\n\n                const label = document.createElement(\"span\");\n                label.className = \"mx-list-option-label\";\n                label.textContent = option.textContent.trim();\n\n                button.appendChild(label);\n\n                button.addEventListener(\"click\", function () {\n                    select.value = option.value;\n                    syncGroup(select, box);\n                });\n\n                list.appendChild(button);\n            });\n\n            field.appendChild(box);\n            syncGroup(select, box);\n        }\n\n        \/* Right filter only. Ranking\/category dropdown remains untouched. *\/\n        buildFilterList(\"mx-filter-score\", false);\n        buildFilterList(\"mx-filter-country\", true);\n        buildFilterList(\"mx-filter-licenses\", false);\n        buildFilterList(\"mx-filter-trading-grade\", false);\n        buildFilterList(\"mx-filter-popularity\", false);\n\n        \/* Country list may be populated after the API response. *\/\n        const countrySelect = document.getElementById(\"mx-filter-country\");\n\n        if (countrySelect && window.MutationObserver) {\n            let count = countrySelect.options.length;\n\n            new MutationObserver(function () {\n                if (countrySelect.options.length !== count) {\n                    count = countrySelect.options.length;\n                    buildFilterList(\"mx-filter-country\", true);\n                }\n            }).observe(countrySelect, {\n                childList: true,\n                subtree: true\n            });\n        }\n\n        const reset = document.getElementById(\"mx-filter-reset\");\n\n        if (reset) {\n            reset.addEventListener(\"click\", function () {\n                setTimeout(function () {\n                    [\n                        \"mx-filter-score\",\n                        \"mx-filter-country\",\n                        \"mx-filter-licenses\",\n                        \"mx-filter-trading-grade\",\n                        \"mx-filter-popularity\"\n                    ].forEach(function (id) {\n                        const select = document.getElementById(id);\n                        const box = panel.querySelector(\n                            '.mx-list-select[data-source=\"' + id + '\"]'\n                        );\n                        syncGroup(select, box);\n                    });\n                }, 0);\n            });\n        }\n    });\n})();\n<\/script>\n\n\n\n<script>\n(function () {\n    function boot() {\n        const panel = document.getElementById(\"mx-filter-panel\");\n        if (!panel) return;\n\n        panel.querySelectorAll(\".mx-static-search\").forEach(function (search) {\n            search.addEventListener(\"input\", function () {\n                const target = search.dataset.target || \"\";\n                const list = panel.querySelector('[data-filter-group=\"' + target + '\"]');\n                if (!list) return;\n\n                const q = search.value.trim().toLowerCase();\n\n                list.querySelectorAll(\".mx-check\").forEach(function (label) {\n                    const text = label.textContent.trim().toLowerCase();\n                    label.style.display = text.includes(q) ? \"flex\" : \"none\";\n                });\n            });\n        });\n    }\n\n    if (document.readyState === \"loading\") {\n        document.addEventListener(\"DOMContentLoaded\", boot);\n    } else {\n        boot();\n    }\n})();\n<\/script>\n\n<style id=\"mx-ranking-scroll-safe-fix\">\n\/* =========================================================\n   MARKUNOX RANKING \u2014 SAFE SCROLL FIX\n   Preserves all existing ranking\/data\/layout behavior.\n========================================================= *\/\n\nhtml,\nbody {\n    height: auto !important;\n    min-height: 100% !important;\n    max-height: none !important;\n\n    overflow-x: hidden !important;\n    overflow-y: auto !important;\n\n    position: static !important;\n    touch-action: pan-y !important;\n    overscroll-behavior-y: auto !important;\n    -webkit-overflow-scrolling: touch !important;\n}\n\n#mx-ranking-app {\n    height: auto !important;\n    min-height: 0 !important;\n    max-height: none !important;\n    overflow: visible !important;\n}\n\n\/* Main ranking must contribute to normal document height. *\/\n#mx-ranking-app .mx-ranking-content,\n#mx-ranking-app .mx-ranking-main,\n#mx-ranking-app #mx-ranking-rows {\n    height: auto !important;\n    min-height: 0 !important;\n    max-height: none !important;\n    overflow: visible !important;\n}\n\n\/* Keep the desktop filter's own scroll working normally. *\/\n@media (min-width: 981px) {\n    #mx-ranking-app .mx-filter-sidebar,\n    #mx-ranking-app #mx-filter-panel {\n        position: sticky !important;\n        top: 18px !important;\n\n        height: auto !important;\n        max-height: calc(100vh - 36px) !important;\n\n        overflow-x: hidden !important;\n        overflow-y: auto !important;\n\n        transform: none !important;\n    }\n\n    body.mx-filter-drawer-open {\n        overflow-y: auto !important;\n    }\n\n    body.mx-filter-drawer-open::before {\n        display: none !important;\n        content: none !important;\n    }\n}\n<\/style>\n\n<script id=\"mx-ranking-scroll-safe-fix-js\">\n(function () {\n    \"use strict\";\n\n    const app = document.getElementById(\"mx-ranking-app\");\n\n    if (!app) {\n        return;\n    }\n\n    function unlockRankingPageScroll() {\n        const root = document.documentElement;\n        const body = document.body;\n\n        root.style.setProperty(\"height\", \"auto\", \"important\");\n        root.style.setProperty(\"min-height\", \"100%\", \"important\");\n        root.style.setProperty(\"max-height\", \"none\", \"important\");\n        root.style.setProperty(\"overflow-x\", \"hidden\", \"important\");\n        root.style.setProperty(\"overflow-y\", \"auto\", \"important\");\n        root.style.setProperty(\"position\", \"static\", \"important\");\n\n        body.style.setProperty(\"height\", \"auto\", \"important\");\n        body.style.setProperty(\"min-height\", \"100%\", \"important\");\n        body.style.setProperty(\"max-height\", \"none\", \"important\");\n        body.style.setProperty(\"overflow-x\", \"hidden\", \"important\");\n        body.style.setProperty(\"overflow-y\", \"auto\", \"important\");\n        body.style.setProperty(\"position\", \"static\", \"important\");\n        body.style.setProperty(\"touch-action\", \"pan-y\", \"important\");\n\n        \/*\n         * Elementor sometimes applies overflow:hidden or a fixed height\n         * to one of the wrappers containing this HTML widget.\n         * Unlock only the ancestor chain of this ranking widget.\n         *\/\n        let node = app.parentElement;\n\n        while (\n            node &&\n            node !== body &&\n            node !== root\n        ) {\n            node.style.setProperty(\"height\", \"auto\", \"important\");\n            node.style.setProperty(\"max-height\", \"none\", \"important\");\n\n            const computed =\n                window.getComputedStyle(node);\n\n            if (\n                computed.overflowY === \"hidden\" ||\n                computed.overflowY === \"clip\"\n            ) {\n                node.style.setProperty(\n                    \"overflow-y\",\n                    \"visible\",\n                    \"important\"\n                );\n            }\n\n            node = node.parentElement;\n        }\n\n        \/*\n         * On desktop the filter is not a drawer, so a stale drawer class\n         * must never lock the main page.\n         *\/\n        if (window.innerWidth >= 981) {\n            body.classList.remove(\n                \"mx-filter-drawer-open\"\n            );\n        }\n    }\n\n    unlockRankingPageScroll();\n\n    requestAnimationFrame(\n        unlockRankingPageScroll\n    );\n\n    setTimeout(\n        unlockRankingPageScroll,\n        120\n    );\n\n    setTimeout(\n        unlockRankingPageScroll,\n        700\n    );\n\n    window.addEventListener(\n        \"resize\",\n        unlockRankingPageScroll,\n        { passive: true }\n    );\n\n    \/*\n     * Re-run only if Elementor or the ranking widget changes classes\/styles.\n     * No wheel\/touch event interception is used.\n     *\/\n    if (\"MutationObserver\" in window) {\n        const observer =\n            new MutationObserver(\n                function () {\n                    unlockRankingPageScroll();\n                }\n            );\n\n        observer.observe(\n            body,\n            {\n                attributes: true,\n                attributeFilter: [\n                    \"class\",\n                    \"style\"\n                ]\n            }\n        );\n    }\n\n})();\n<\/script>\n\n<style id=\"mx-filter-fixed-no-scroll\">\n\/* =========================================================\n   FILTER SIDEBAR \u2014 FIXED \/ NO INTERNAL SCROLL\n========================================================= *\/\n\n@media (min-width: 981px) {\n\n    #mx-ranking-app .mx-filter-sidebar,\n    #mx-ranking-app #mx-filter-panel {\n        position: sticky !important;\n        top: 18px !important;\n\n        height: auto !important;\n        min-height: 0 !important;\n        max-height: none !important;\n\n        overflow: visible !important;\n        overflow-x: visible !important;\n        overflow-y: visible !important;\n\n        scrollbar-width: none !important;\n        -ms-overflow-style: none !important;\n\n        transform: none !important;\n    }\n\n    #mx-ranking-app .mx-filter-sidebar::-webkit-scrollbar,\n    #mx-ranking-app #mx-filter-panel::-webkit-scrollbar {\n        display: none !important;\n        width: 0 !important;\n        height: 0 !important;\n    }\n}\n<\/style>\n\n<style id=\"mx-broker-name-logo-only-fix\">\n\/* =========================================================\n   BROKER NAME + EASYMARKETS \/ TIGER LOGO FIX ONLY\n========================================================= *\/\n\n#mx-ranking-app .mx-broker-content {\n    overflow: visible !important;\n    min-width: 0 !important;\n}\n\n#mx-ranking-app .mx-broker-title-row {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: flex-start !important;\n    flex-wrap: wrap !important;\n    gap: 5px !important;\n    width: 100% !important;\n    max-width: none !important;\n    overflow: visible !important;\n    white-space: normal !important;\n}\n\n#mx-ranking-app .mx-broker-name {\n    display: block !important;\n    width: auto !important;\n    min-width: 0 !important;\n    max-width: 100% !important;\n    overflow: visible !important;\n    text-overflow: clip !important;\n    white-space: normal !important;\n    word-break: normal !important;\n    overflow-wrap: normal !important;\n    line-height: 1.15 !important;\n}\n\n#mx-ranking-app .mx-broker-logo.mx-logo-easymarkets,\n#mx-ranking-app .mx-broker-logo.mx-logo-tiger {\n    object-fit: contain !important;\n    object-position: center !important;\n    background: #0B1320 !important;\n    padding: 10px !important;\n    border-radius: 12px !important;\n}\n\n@container (max-width: 1000px) {\n    #mx-ranking-app .mx-broker-name {\n        font-size: 12px !important;\n    }\n}\n\n@container (max-width: 720px) {\n    #mx-ranking-app .mx-broker-title-row {\n        display: block !important;\n    }\n\n    #mx-ranking-app .mx-broker-name {\n        font-size: 11px !important;\n        max-width: 100% !important;\n        overflow-wrap: anywhere !important;\n    }\n\/* =========================================\n   BROKER HEADER + BROKER ROW EXACT ALIGNMENT\n   ========================================= *\/\n\n#mx-ranking-app .mx-ranking-header > div:nth-child(2) {\n    text-align: left !important;\n    justify-self: stretch !important;\n\n    padding-left: 20px !important;\n}\n\n#mx-ranking-app .mx-col-broker {\n    padding-left: 20px !important;\n    padding-right: 0 !important;\n\n    justify-content: flex-start !important;\n}\n\n#mx-ranking-app .mx-broker-layout {\n    width: 100% !important;\n\n    display: grid !important;\n    grid-template-columns:\n        125px\n        minmax(0, 1fr) !important;\n\n    align-items: center !important;\n\n    column-gap: 10px !important;\n}\n\n#mx-ranking-app .mx-broker-logo-wrap {\n    width: 125px !important;\n    max-width: 125px !important;\n\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n}\n\n#mx-ranking-app .mx-broker-logo {\n    width: 124px !important;\n    max-width: 124px !important;\n\n    object-fit: contain !important;\n    object-position: center !important;\n \n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-30e8442 score-stars elementor-widget elementor-widget-text-editor\" data-id=\"30e8442\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\ud83c\udfc6 MARKUNOX Ranking \u2605 Brand Ranking \u2668 Popular Ranking \u25a5 Trading ENV \u2620 Scam Broker All Categories All Categories \u2304 Last Update: LIVE \u26b2 Filter Filters Find the broker that matches your needs \u00d7 Broker Search \u2303 Broker name MARKUNOX Score \u2303 Minimum score Any Score5.0+6.0+7.0+8.0+9.0+ Any Score \u2304 Country \u2303 Registered country All Countries [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-2565","page","type-page","status-publish","hentry"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\ud83c\udfc6 MARKUNOX Ranking \u2605 Brand Ranking \u2668 Popular Ranking \u25a5 Trading ENV \u2620 Scam Broker All Categories All Categories \u2304 Last Update: LIVE \u26b2 Filter Filters Find the broker that matches your needs \u00d7 Broker Search \u2303 Broker name MARKUNOX Score \u2303 Minimum score Any Score 5.0+ 6.0+ 7.0+ 8.0+ 9.0+ Any Score \u2304 Country\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/markunox.com\/ar\/brokers-2\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ar_AR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"markunox - MARKUNOX \u2014 Global financial markets, advanced trading analysis, broker intelligence, AI-powered insights, real-time data and professional trading tools.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Brokers - markunox\" \/>\n\t\t<meta property=\"og:description\" content=\"\ud83c\udfc6 MARKUNOX Ranking \u2605 Brand Ranking \u2668 Popular Ranking \u25a5 Trading ENV \u2620 Scam Broker All Categories All Categories \u2304 Last Update: LIVE \u26b2 Filter Filters Find the broker that matches your needs \u00d7 Broker Search \u2303 Broker name MARKUNOX Score \u2303 Minimum score Any Score 5.0+ 6.0+ 7.0+ 8.0+ 9.0+ Any Score \u2304 Country\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/markunox.com\/ar\/brokers-2\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/markunox.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Sep-22-2026-12_58_01-AM.webp\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/markunox.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Sep-22-2026-12_58_01-AM.webp\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-09-16T00:17:14+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-21T17:16:24+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Brokers - markunox\" \/>\n\t\t<meta name=\"twitter:description\" content=\"\ud83c\udfc6 MARKUNOX Ranking \u2605 Brand Ranking \u2668 Popular Ranking \u25a5 Trading ENV \u2620 Scam Broker All Categories All Categories \u2304 Last Update: LIVE \u26b2 Filter Filters Find the broker that matches your needs \u00d7 Broker Search \u2303 Broker name MARKUNOX Score \u2303 Minimum score Any Score 5.0+ 6.0+ 7.0+ 8.0+ 9.0+ Any Score \u2304 Country\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/markunox.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Sep-22-2026-12_58_01-AM.webp\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/markunox.com\\\/ar\\\/brokers-2\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/markunox.com\\\/ar#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/markunox.com\\\/ar\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/markunox.com\\\/ar\\\/brokers-2\\\/#listItem\",\"name\":\"Brokers\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/markunox.com\\\/ar\\\/brokers-2\\\/#listItem\",\"position\":2,\"name\":\"Brokers\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/markunox.com\\\/ar#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/markunox.com\\\/ar\\\/#organization\",\"name\":\"markunox\",\"description\":\"MARKUNOX \\u2014 Global financial markets, advanced trading analysis, broker intelligence, AI-powered insights, real-time data and professional trading tools.\",\"url\":\"https:\\\/\\\/markunox.com\\\/ar\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/markunox.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/ChatGPT-Image-Sep-22-2026-12_58_01-AM.webp\",\"@id\":\"https:\\\/\\\/markunox.com\\\/ar\\\/brokers-2\\\/#organizationLogo\",\"width\":1122,\"height\":1402,\"caption\":\"Markunox \\u2013 Global Financial Intelligence\"},\"image\":{\"@id\":\"https:\\\/\\\/markunox.com\\\/ar\\\/brokers-2\\\/#organizationLogo\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/markunox.com\\\/ar\\\/brokers-2\\\/#webpage\",\"url\":\"https:\\\/\\\/markunox.com\\\/ar\\\/brokers-2\\\/\",\"name\":\"Brokers - markunox\",\"description\":\"\\ud83c\\udfc6 MARKUNOX Ranking \\u2605 Brand Ranking \\u2668 Popular Ranking \\u25a5 Trading ENV \\u2620 Scam Broker All Categories All Categories \\u2304 Last Update: LIVE \\u26b2 Filter Filters Find the broker that matches your needs \\u00d7 Broker Search \\u2303 Broker name MARKUNOX Score \\u2303 Minimum score Any Score 5.0+ 6.0+ 7.0+ 8.0+ 9.0+ Any Score \\u2304 Country\",\"inLanguage\":\"ar\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/markunox.com\\\/ar\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/markunox.com\\\/ar\\\/brokers-2\\\/#breadcrumblist\"},\"datePublished\":\"2026-09-16T04:17:14+04:00\",\"dateModified\":\"2026-09-21T21:16:24+04:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/markunox.com\\\/ar\\\/#website\",\"url\":\"https:\\\/\\\/markunox.com\\\/ar\\\/\",\"name\":\"markunox\",\"description\":\"MARKUNOX \\u2014 Global financial markets, advanced trading analysis, broker intelligence, AI-powered insights, real-time data and professional trading tools.\",\"inLanguage\":\"ar\",\"publisher\":{\"@id\":\"https:\\\/\\\/markunox.com\\\/ar\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Brokers - markunox","description":"\ud83c\udfc6 MARKUNOX Ranking \u2605 Brand Ranking \u2668 Popular Ranking \u25a5 Trading ENV \u2620 Scam Broker All Categories All Categories \u2304 Last Update: LIVE \u26b2 Filter Filters Find the broker that matches your needs \u00d7 Broker Search \u2303 Broker name MARKUNOX Score \u2303 Minimum score Any Score 5.0+ 6.0+ 7.0+ 8.0+ 9.0+ Any Score \u2304 Country","canonical_url":"https:\/\/markunox.com\/ar\/brokers-2\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/markunox.com\/ar\/brokers-2\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/markunox.com\/ar#listItem","position":1,"name":"Home","item":"https:\/\/markunox.com\/ar","nextItem":{"@type":"ListItem","@id":"https:\/\/markunox.com\/ar\/brokers-2\/#listItem","name":"Brokers"}},{"@type":"ListItem","@id":"https:\/\/markunox.com\/ar\/brokers-2\/#listItem","position":2,"name":"Brokers","previousItem":{"@type":"ListItem","@id":"https:\/\/markunox.com\/ar#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/markunox.com\/ar\/#organization","name":"markunox","description":"MARKUNOX \u2014 Global financial markets, advanced trading analysis, broker intelligence, AI-powered insights, real-time data and professional trading tools.","url":"https:\/\/markunox.com\/ar\/","logo":{"@type":"ImageObject","url":"https:\/\/markunox.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Sep-22-2026-12_58_01-AM.webp","@id":"https:\/\/markunox.com\/ar\/brokers-2\/#organizationLogo","width":1122,"height":1402,"caption":"Markunox \u2013 Global Financial Intelligence"},"image":{"@id":"https:\/\/markunox.com\/ar\/brokers-2\/#organizationLogo"}},{"@type":"WebPage","@id":"https:\/\/markunox.com\/ar\/brokers-2\/#webpage","url":"https:\/\/markunox.com\/ar\/brokers-2\/","name":"Brokers - markunox","description":"\ud83c\udfc6 MARKUNOX Ranking \u2605 Brand Ranking \u2668 Popular Ranking \u25a5 Trading ENV \u2620 Scam Broker All Categories All Categories \u2304 Last Update: LIVE \u26b2 Filter Filters Find the broker that matches your needs \u00d7 Broker Search \u2303 Broker name MARKUNOX Score \u2303 Minimum score Any Score 5.0+ 6.0+ 7.0+ 8.0+ 9.0+ Any Score \u2304 Country","inLanguage":"ar","isPartOf":{"@id":"https:\/\/markunox.com\/ar\/#website"},"breadcrumb":{"@id":"https:\/\/markunox.com\/ar\/brokers-2\/#breadcrumblist"},"datePublished":"2026-09-16T04:17:14+04:00","dateModified":"2026-09-21T21:16:24+04:00"},{"@type":"WebSite","@id":"https:\/\/markunox.com\/ar\/#website","url":"https:\/\/markunox.com\/ar\/","name":"markunox","description":"MARKUNOX \u2014 Global financial markets, advanced trading analysis, broker intelligence, AI-powered insights, real-time data and professional trading tools.","inLanguage":"ar","publisher":{"@id":"https:\/\/markunox.com\/ar\/#organization"}}]},"og:locale":"ar_AR","og:site_name":"markunox - MARKUNOX \u2014 Global financial markets, advanced trading analysis, broker intelligence, AI-powered insights, real-time data and professional trading tools.","og:type":"article","og:title":"Brokers - markunox","og:description":"\ud83c\udfc6 MARKUNOX Ranking \u2605 Brand Ranking \u2668 Popular Ranking \u25a5 Trading ENV \u2620 Scam Broker All Categories All Categories \u2304 Last Update: LIVE \u26b2 Filter Filters Find the broker that matches your needs \u00d7 Broker Search \u2303 Broker name MARKUNOX Score \u2303 Minimum score Any Score 5.0+ 6.0+ 7.0+ 8.0+ 9.0+ Any Score \u2304 Country","og:url":"https:\/\/markunox.com\/ar\/brokers-2\/","og:image":"https:\/\/markunox.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Sep-22-2026-12_58_01-AM.webp","og:image:secure_url":"https:\/\/markunox.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Sep-22-2026-12_58_01-AM.webp","article:published_time":"2026-09-16T00:17:14+00:00","article:modified_time":"2026-09-21T17:16:24+00:00","twitter:card":"summary_large_image","twitter:title":"Brokers - markunox","twitter:description":"\ud83c\udfc6 MARKUNOX Ranking \u2605 Brand Ranking \u2668 Popular Ranking \u25a5 Trading ENV \u2620 Scam Broker All Categories All Categories \u2304 Last Update: LIVE \u26b2 Filter Filters Find the broker that matches your needs \u00d7 Broker Search \u2303 Broker name MARKUNOX Score \u2303 Minimum score Any Score 5.0+ 6.0+ 7.0+ 8.0+ 9.0+ Any Score \u2304 Country","twitter:image":"https:\/\/markunox.com\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Sep-22-2026-12_58_01-AM.webp"},"aioseo_meta_data":{"post_id":"2565","title":null,"description":null,"keywords":null,"keyphrases":{"focus":[],"additional":[]},"focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"WebPage","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-09-16 00:16:52","updated":"2026-09-21 19:36:47"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/markunox.com\/ar\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tBrokers\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/markunox.com\/ar"},{"label":"Brokers","link":"https:\/\/markunox.com\/ar\/brokers-2\/"}],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/markunox.com\/ar\/wp-json\/wp\/v2\/pages\/2565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/markunox.com\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/markunox.com\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/markunox.com\/ar\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/markunox.com\/ar\/wp-json\/wp\/v2\/comments?post=2565"}],"version-history":[{"count":12,"href":"https:\/\/markunox.com\/ar\/wp-json\/wp\/v2\/pages\/2565\/revisions"}],"predecessor-version":[{"id":3163,"href":"https:\/\/markunox.com\/ar\/wp-json\/wp\/v2\/pages\/2565\/revisions\/3163"}],"wp:attachment":[{"href":"https:\/\/markunox.com\/ar\/wp-json\/wp\/v2\/media?parent=2565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}