{"id":29352,"date":"2025-07-21T08:15:11","date_gmt":"2025-07-21T08:15:11","guid":{"rendered":"https:\/\/garipesa.com\/?p=29352"},"modified":"2026-06-10T07:41:23","modified_gmt":"2026-06-10T04:41:23","slug":"hatua-za-kubadili-umiliki-wa-gari-tra","status":"publish","type":"post","link":"https:\/\/garipesa.com\/en\/kuuza-gari-tanzania\/hatua-za-kubadili-umiliki-wa-gari-tra\/","title":{"rendered":"Gharama Za Kubadili Umiliki Wa Gari TRA Online"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"29352\" class=\"elementor elementor-29352\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d22ee8d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d22ee8d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-3352296 elementor-hidden-mobile\" data-id=\"3352296\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-7cfb4e9\" data-id=\"7cfb4e9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-95cf855 vehicle_fees elementor-widget elementor-widget-shortcode\" data-id=\"95cf855\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">        <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/tom-select@2.6.1\/dist\/css\/tom-select.css\">\n        <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/tom-select@2.6.1\/dist\/js\/tom-select.complete.min.js\"><\/script>\n\n        <div id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb\" class=\"gp-vfees-root\">\n            <style>\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb,\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb *{ color: #fff; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-launch{\n                    padding:12px 16px; border-radius:10px; border:0; cursor:pointer;\n                    background:#ff7a00; color:#fff; font-weight:900; display:block; margin:0 auto;\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-launch:hover{ background:#e56e00; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-modal{ position:fixed; inset:0; display:none; z-index:999999; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-modal.is-open{ display:flex; align-items:center; justify-content:center; padding:16px; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-modal__overlay{ position:absolute; inset:0; background:rgba(0,0,0,0.70); }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-modal__panel{\n                    position:relative; width:100%; max-width:620px; padding:0; border-radius:14px;\n                    overflow:hidden; z-index:1; background:#111;\n                    border:1px solid rgba(255,255,255,0.18); box-shadow:0 14px 40px rgba(0,0,0,0.65);\n                    max-height:90vh; display:flex; flex-direction:column;\n                }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-modal__head{\n                    display:flex; align-items:center; justify-content:space-between; gap:10px;\n                    padding:12px 14px; background:#0d0d0d; border-bottom:1px solid rgba(255,255,255,0.12);\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-modal__close{\n                    width:42px; height:42px; border-radius:12px; border:2px solid rgba(255,122,0,0.95);\n                    background:#ff7a00; color:#fff; cursor:pointer; font-weight:900; font-size:18px; line-height:1;\n                    display:flex; align-items:center; justify-content:center; box-shadow:0 10px 24px rgba(0,0,0,0.45);\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-modal__close:hover{ background:#e56e00; border-color:rgba(255,122,0,1); }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-modal__body{ padding:0; overflow-y:auto; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-vfees-steps{ max-width:100%; padding:16px; background:#121212; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-title{ margin:0; font-size:16px; font-weight:900; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb label{ display:block; font-size:13px; opacity:0.95; margin:10px 0 6px; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb input[type=\"text\"]{\n                    width:100%; padding:12px; border-radius:10px;\n                    border:1px solid rgba(255,255,255,0.22); background:rgba(0,0,0,0.30); color:#fff; outline:none;\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb input::placeholder{ color:rgba(255,255,255,0.70); }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-row{ display:flex; gap:10px; flex-wrap:wrap; margin-top:12px; align-items:center; justify-content:center; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb button.gp-btn{\n                    padding:12px 16px; border-radius:10px; border:0; cursor:pointer;\n                    background:#ff7a00; color:#fff; font-weight:800;\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb button.gp-btn:hover{ background:#e56e00; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb button.gp-btn:disabled{ opacity:0.7; cursor:not-allowed; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-loading{ display:none; margin-left:6px; font-size:13px; opacity:0.9; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-msg{\n                    margin-top:12px; padding:10px 12px; border-radius:10px; display:none;\n                    border:1px solid rgba(255,255,255,0.18); background:rgba(0,0,0,0.22);\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-msg.ok{ display:block; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-msg.err{ display:block; border-color:rgba(255,120,120,0.65); }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-hidden{ display:none !important; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-back{\n                    background:transparent !important; color:#ff7a00 !important; border:1px solid rgba(255,122,0,0.55) !important;\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-back:hover{ background:rgba(255,122,0,0.12) !important; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-confirm{\n                    margin-top:10px; padding:10px 12px; border-radius:10px;\n                    border:1px dashed rgba(255,255,255,0.22); font-size:13px; opacity:0.98; background:rgba(0,0,0,0.18);\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-confirm strong{ font-weight:900; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb input[readonly]{ opacity:0.85; cursor:not-allowed; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-phone-locked-note{ margin-top:6px; font-size:12px; opacity:0.8; }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-type-box{\n                    padding:12px; border-radius:12px; border:1px solid rgba(255,255,255,0.16); background:rgba(0,0,0,0.16);\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-type-title{ font-weight:900; margin:0 0 10px 0; font-size:15px; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-type-options{ display:flex; gap:10px; flex-wrap:wrap; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-type-opt{\n                    flex:1 1 140px; padding:12px 14px; border-radius:12px; border:1px solid rgba(255,255,255,0.20);\n                    background:rgba(0,0,0,0.18); cursor:pointer; font-weight:900; text-align:center; user-select:none;\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-type-opt:hover{ border-color:rgba(255,122,0,0.65); }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-type-opt.is-active{\n                    border-color:rgba(255,122,0,0.95); box-shadow:0 0 0 2px rgba(255,122,0,0.18) inset;\n                }\n\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-otp-box{\n                    padding:12px; border-radius:12px; border:1px solid rgba(255,255,255,0.16); background:rgba(0,0,0,0.16);\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-otp-title{ font-weight:900; margin:0 0 6px 0; font-size:15px; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-otp-text{ margin:0 0 10px 0; opacity:0.95; font-size:13px; }\n\n                \/* Result \/ success summary *\/\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-result-box{\n                    padding:14px; border-radius:12px; border:1px solid rgba(255,122,0,0.55); background:rgba(0,0,0,0.22);\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-result-title{\n                    font-weight:900; margin:0 0 4px 0; font-size:15px; color:#ff7a00 !important;\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-result-vehicle{ font-weight:900; margin:0 0 10px 0; font-size:14px; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-result-table{ width:100%; border-collapse:collapse; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-result-table td{ padding:7px 0; font-size:14px; border-bottom:1px solid rgba(255,255,255,0.10); }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-result-table td:last-child{ text-align:right; font-weight:700; white-space:nowrap; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-result-table tr.gp-result-total td{ border-bottom:0; padding-top:10px; font-size:16px; font-weight:900; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-result-table tr.gp-result-total td:last-child{ color:#ff7a00 !important; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .gp-result-note{\n                    margin-top:12px; padding:10px 12px; border-radius:10px;\n                    border:1px dashed rgba(255,122,0,0.55); font-size:13px; background:rgba(255,122,0,0.08);\n                }\n\n                \/* Tom Select dark theming inside the modal *\/\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .ts-wrapper{ margin-top:2px; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .ts-control{\n                    background:rgba(0,0,0,0.30) !important; border:1px solid rgba(255,255,255,0.22) !important;\n                    color:#fff !important; border-radius:10px !important; padding:8px 10px !important;\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .ts-control input,\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .ts-control .item{ color:#fff !important; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .ts-dropdown{\n                    background:#1b1b1b !important; color:#fff !important;\n                    border:1px solid rgba(255,255,255,0.22) !important;\n                }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .ts-dropdown .option{ color:#fff !important; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .ts-dropdown .active{ background:rgba(255,122,0,0.35) !important; }\n                #gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb .ts-dropdown .optgroup-header{ color:rgba(255,255,255,0.6) !important; }\n            <\/style>\n\n            <button type=\"button\" class=\"gp-launch\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_open\">Kikokotoo Cha Gharama Za Kubadili Umiliki TRA<\/button>\n\n            <div class=\"gp-modal\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_modal\" aria-hidden=\"true\">\n                <div class=\"gp-modal__overlay\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_overlay\"><\/div>\n\n                <div class=\"gp-modal__panel\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_modal_title\">\n                    <div class=\"gp-modal__head\">\n                        <div class=\"gp-title\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_modal_title\">Kikokotoo Cha Gharama Za Kubadili Umiliki TRA<\/div>\n                        <button type=\"button\" class=\"gp-modal__close\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_close\" aria-label=\"Close\">\u2715<\/button>\n                    <\/div>\n\n                    <div class=\"gp-modal__body\">\n                        <div class=\"gp-vfees-steps\">\n                            <div id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_form\">\n\n                                <!-- Step 1: Owner role -->\n                                <div id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_step_role\">\n                                    <div class=\"gp-type-box\">\n                                        <div class=\"gp-type-title\">Wewe Ni Nani Kwenye Umiliki?<\/div>\n                                        <div class=\"gp-type-options\">\n                                            <div class=\"gp-type-opt\" data-role=\"seller\">Mmiliki Wa Zamani (Seller)<\/div>\n                                            <div class=\"gp-type-opt\" data-role=\"buyer\">Mmiliki Mpya (Buyer)<\/div>\n                                        <\/div>\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_btn_role\">Endelea<\/button>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 2: Vehicle details -->\n                                <div id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_step_vehicle\" class=\"gp-hidden\">\n                                    <div class=\"gp-type-box\">\n                                        <div class=\"gp-type-title\">Taarifa Za Gari<\/div>\n\n                                        <label for=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_make\">Make<\/label>\n                                        <select id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_make\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_model\">Model<\/label>\n                                        <select id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_model\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_year\">Mwaka (Year)<\/label>\n                                        <select id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_year\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_usajili\">Usajili<\/label>\n                                        <select id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_usajili\" placeholder=\"\u2014\"><\/select>\n\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_back_to_role\">\u2190 Rudi Nyuma<\/button>\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_btn_vehicle\">Endelea<\/button>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 3: Price -->\n                                <div id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_step_price\" class=\"gp-hidden\">\n                                    <label for=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_price\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_price_label\">Bei Ya Gari Kwenye Mkataba (TSh)<\/label>\n                                    <input id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_price\" type=\"text\" inputmode=\"numeric\" placeholder=\"Mfano: 25,000,000\" autocomplete=\"off\" \/>\n\n                                    <label for=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_region\">Limeuzwa Mkoa Gani?<\/label>\n                                    <select id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_region\" placeholder=\"\u2014\"><\/select>\n\n                                    <div class=\"gp-row\">\n                                        <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_back_to_vehicle_from_price\">\u2190 Rudi Nyuma<\/button>\n                                        <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_btn_price\">Piga Hesabu<\/button>\n                                        <span class=\"gp-loading\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_loading_price\">Inahesabu\u2026<\/span>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 5: Name + Phone -->\n                                <div id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_step_phone\" class=\"gp-hidden\">\n                                    <div class=\"gp-confirm\">\n                                        Hesabu ya gari yako ya <strong id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_confirm_price\">\u2014<\/strong> imekamilika.\n                                                                                Weka jina na namba ya simu \u2014 tutakutumia OTP kuthibitisha, kisha gharama zote za TRA kwa SMS (BURE).\n                                                                            <\/div>\n\n                                    <label for=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_name\">Jina Lako<\/label>\n                                    <input id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_name\" type=\"text\" inputmode=\"text\" placeholder=\"Mfano: John Mlay\" autocomplete=\"name\" \/>\n\n                                    <label for=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_phone\">Namba Ya Simu<\/label>\n                                    <input id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_phone\" type=\"text\" inputmode=\"tel\" placeholder=\"Mfano: 0712345678\" autocomplete=\"tel\" value=\"\" \/>\n                                    \n                                    <div class=\"gp-row\">\n                                        <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_back_to_price\">\u2190 Rudi Nyuma<\/button>\n                                        <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_btn_phone\">Endelea<\/button>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 6: OTP -->\n                                <div id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_step_otp\" class=\"gp-hidden\">\n                                    <div class=\"gp-otp-box\">\n                                        <div class=\"gp-otp-title\">THIBITISHA NAMBA YAKO<\/div>\n                                        <div class=\"gp-otp-text\">Tumekutumia namba ya uthibitisho (OTP) kwa SMS. Iingize hapa chini.<\/div>\n                                        <div class=\"gp-confirm\" style=\"margin-top:0;\">\n                                            Namba: <strong id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_otp_phone_num\">\u2014<\/strong>\n                                        <\/div>\n\n                                        <label for=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_otp\">Weka OTP<\/label>\n                                        <input id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_otp\" type=\"text\" inputmode=\"numeric\" maxlength=\"6\" placeholder=\"Mfano: 123456\" autocomplete=\"one-time-code\" \/>\n\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_back_to_phone\">\u2190 Rudi Nyuma<\/button>\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_btn_resend\">Tuma OTP Tena<\/button>\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_btn_verify\">Thibitisha &amp; Tuma<\/button>\n                                            <span class=\"gp-loading\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_loading_otp\">Inatuma\u2026<\/span>\n                                        <\/div>\n                                        <span style=\"display:inline;font-weight:normal;font-style:normal;color:inherit;font-size:10px;\">\n                                            Kwa kuthibitisha Unakubali kupokea SMS kutoka GariPesa na washirika wake.\n                                        <\/span>\n                                    <\/div>\n                                <\/div>\n\n                                <div class=\"gp-msg ok\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_ok\"><\/div>\n                                <div class=\"gp-msg err\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_err\"><\/div>\n                            <\/div>\n\n                            <!-- Success screen: result breakdown + SMS note -->\n                            <div id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_final\" style=\"display:none;\">\n                                <div class=\"gp-result-box\">\n                                    <div class=\"gp-result-title\">GHARAMA ZA TRA KUBADILI UMILIKI<\/div>\n                                    <div class=\"gp-result-vehicle\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_res_vehicle\"><\/div>\n                                    <table class=\"gp-result-table\">\n                                        <tbody>\n                                            <tr><td>Bei Ya Gari<\/td><td id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_res_price\">\u2014<\/td><\/tr>\n                                            <tr id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_res_usajili_row\" style=\"display:none;\"><td>Usajili<\/td><td id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_res_usajili\">\u2014<\/td><\/tr>\n                                            <tr id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_res_region_row\" style=\"display:none;\"><td>Mkoa<\/td><td id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_res_region\">\u2014<\/td><\/tr>\n                                            <tr><td>Stamp Duty<\/td><td id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_res_stamp\">\u2014<\/td><\/tr>\n                                            <tr><td>Transfer Fee<\/td><td id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_res_transfer\">\u2014<\/td><\/tr>\n                                            <tr><td>Card Mpya<\/td><td id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_res_card\">\u2014<\/td><\/tr>\n                                            <tr class=\"gp-result-total\"><td>JUMLA<\/td><td id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_res_total\">\u2014<\/td><\/tr>\n                                        <\/tbody>\n                                    <\/table>\n                                    <div class=\"gp-result-note\" id=\"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb_res_note\">Tumekutumia gharama hizi pia kwa SMS. Tafadhali angalia na hifadhi ujumbe huo kwenye simu yako kwa marejeo.<\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <script>\n                (function(){\n                    const uid     = \"gp_vfees_86cbb49e-d093-4d2b-9bd8-c6a696a4eaeb\";\n                    const ajaxUrl = \"https:\\\/\\\/garipesa.com\\\/wp-admin\\\/admin-ajax.php\";\n                    const skipOtp = false;\n\n                    const resultSmsNote   = \"Tumekutumia gharama hizi pia kwa SMS. Tafadhali angalia na hifadhi ujumbe huo kwenye simu yako kwa marejeo.\";\n\n                    const openBtn  = document.getElementById(uid + '_open');\n                    const modal    = document.getElementById(uid + '_modal');\n                    const overlay  = document.getElementById(uid + '_overlay');\n                    const closeBtn = document.getElementById(uid + '_close');\n                    const wrapForm = document.getElementById(uid + '_form');\n\n                    const stepRole    = document.getElementById(uid + '_step_role');\n                    const stepVehicle = document.getElementById(uid + '_step_vehicle');\n                    const stepPrice   = document.getElementById(uid + '_step_price');\n                    const stepPhone   = document.getElementById(uid + '_step_phone');\n                    const stepOtp     = document.getElementById(uid + '_step_otp');\n\n                    const priceEl = document.getElementById(uid + '_price');\n                    const priceLabelEl = document.getElementById(uid + '_price_label');\n                    const nameEl  = document.getElementById(uid + '_name');\n                    const phoneEl = document.getElementById(uid + '_phone');\n                    const otpEl   = document.getElementById(uid + '_otp');\n\n                    const btnRole    = document.getElementById(uid + '_btn_role');\n                    const btnVehicle = document.getElementById(uid + '_btn_vehicle');\n                    const btnPrice   = document.getElementById(uid + '_btn_price');\n                    const btnPhone   = document.getElementById(uid + '_btn_phone');\n                    const btnResend  = document.getElementById(uid + '_btn_resend');\n                    const btnVerify  = document.getElementById(uid + '_btn_verify');\n\n                    const backToRole              = document.getElementById(uid + '_back_to_role');\n                    const backToVehicleFromPrice  = document.getElementById(uid + '_back_to_vehicle_from_price');\n                    const backToPrice             = document.getElementById(uid + '_back_to_price');\n                    const backToPhone             = document.getElementById(uid + '_back_to_phone');\n\n                    const loadingPrice = document.getElementById(uid + '_loading_price');\n                    const loadingOtp   = document.getElementById(uid + '_loading_otp');\n\n                    const confirmPriceEl = document.getElementById(uid + '_confirm_price');\n                    const otpPhoneEl     = document.getElementById(uid + '_otp_phone_num');\n\n                    const okBox   = document.getElementById(uid + '_ok');\n                    const errBox  = document.getElementById(uid + '_err');\n                    const finalBox = document.getElementById(uid + '_final');\n\n                    \/\/ Result fields\n                    const resVehicle    = document.getElementById(uid + '_res_vehicle');\n                    const resPrice      = document.getElementById(uid + '_res_price');\n                    const resUsajiliRow = document.getElementById(uid + '_res_usajili_row');\n                    const resUsajili    = document.getElementById(uid + '_res_usajili');\n                    const resRegionRow  = document.getElementById(uid + '_res_region_row');\n                    const resRegion     = document.getElementById(uid + '_res_region');\n                    const resStamp      = document.getElementById(uid + '_res_stamp');\n                    const resTransfer   = document.getElementById(uid + '_res_transfer');\n                    const resCard       = document.getElementById(uid + '_res_card');\n                    const resTotal      = document.getElementById(uid + '_res_total');\n                    const resNote       = document.getElementById(uid + '_res_note');\n\n                    const roleOpts = Array.prototype.slice.call(document.querySelectorAll('#' + uid + ' .gp-type-opt[data-role]'));\n\n                    let storedOwnerRole = '';\n                    let storedPriceDigits = '';\n                    let storedPricePretty = '';\n\n                    let tsMake = null, tsModel = null, tsYear = null, tsRegion = null, tsUsajili = null;\n                    let cachedNonce = '';\n                    let makesLoaded = false;\n                    let lookupsLoaded = false;\n                    let resendTimer = null;\n\n                    function lockBody(lock){ try{ document.body.style.overflow = lock ? 'hidden' : ''; }catch(e){} }\n\n                    async function getNonce(force){\n                        if(cachedNonce && !force) return cachedNonce;\n                        const fd = new FormData();\n                        fd.append('action', 'gp_vfees_get_nonce');\n                        try{\n                            const res = await fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body:fd });\n                            const data = await res.json();\n                            if(data && data.success && data.data && data.data.nonce){\n                                cachedNonce = String(data.data.nonce);\n                                return cachedNonce;\n                            }\n                        }catch(e){}\n                        return '';\n                    }\n\n                    async function apiPost(action, extra){\n                        const nonce = await getNonce(false);\n                        const fd = new FormData();\n                        fd.append('action', action);\n                        fd.append('nonce', nonce);\n                        if(extra){ Object.keys(extra).forEach(function(k){ fd.append(k, extra[k]); }); }\n                        const res = await fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body:fd });\n                        return res.json();\n                    }\n\n                    function fillSelect(ts, items){\n                        ts.clearOptions();\n                        ts.clear(true);\n                        (items || []).forEach(function(it){\n                            ts.addOption({ value: String(it.id), text: it.name });\n                        });\n                        ts.refreshOptions(false);\n                    }\n\n                    function buildYears(ts){\n                        const now = new Date().getFullYear();\n                        const start = 1980;\n                        const opts = [];\n                        for(let y = now; y >= start; y--){ opts.push({ value:String(y), text:String(y) }); }\n                        ts.clearOptions();\n                        opts.forEach(function(o){ ts.addOption(o); });\n                        ts.refreshOptions(false);\n                    }\n\n                    function initTomSelects(){\n                        if(typeof TomSelect === 'undefined') return;\n                        const common = { create:false, maxOptions:1000, maxItems:1, hideSelected:true, closeAfterSelect:true, allowEmptyOption:false, plugins:[] };\n\n                        tsMake    = new TomSelect('#' + uid + '_make',    Object.assign({}, common, { placeholder:'Chagua make\u2026' }));\n                        tsModel   = new TomSelect('#' + uid + '_model',   Object.assign({}, common, { placeholder:'Chagua make kwanza\u2026' }));\n                        tsYear    = new TomSelect('#' + uid + '_year',    Object.assign({}, common, { placeholder:'Chagua mwaka\u2026' }));\n                        tsRegion  = new TomSelect('#' + uid + '_region',  Object.assign({}, common, { placeholder:'Chagua mkoa\u2026' }));\n                        tsUsajili = new TomSelect('#' + uid + '_usajili', Object.assign({}, common, { placeholder:'Chagua usajili\u2026' }));\n\n                        buildYears(tsYear);\n\n                        tsModel.disable();\n\n                        tsMake.on('change', async function(makeId){\n                            tsModel.clear(true);\n                            tsModel.clearOptions();\n                            tsModel.disable();\n                            if(!makeId){ return; }\n                            tsModel.settings.placeholder = 'Inapakia\u2026';\n                            tsModel.load && tsModel.load('');\n                            try{\n                                const data = await apiPost('gp_vfees_models', { make_id: makeId });\n                                if(data && data.success){\n                                    fillSelect(tsModel, data.data.items);\n                                    tsModel.enable();\n                                }\n                            }catch(e){}\n                        });\n                    }\n\n                    async function loadMakes(){\n                        if(makesLoaded || !tsMake) return;\n                        try{\n                            const data = await apiPost('gp_vfees_makes', {});\n                            if(data && data.success){\n                                fillSelect(tsMake, data.data.items);\n                                makesLoaded = true;\n                            }\n                        }catch(e){}\n                    }\n\n                    async function loadLookups(){\n                        if(lookupsLoaded) return;\n                        try{\n                            const [reg, usa] = await Promise.all([\n                                apiPost('gp_vfees_regions', {}),\n                                apiPost('gp_vfees_usajili', {})\n                            ]);\n                            if(reg && reg.success) fillSelect(tsRegion, reg.data.items);\n                            if(usa && usa.success) fillSelect(tsUsajili, usa.data.items);\n                            lookupsLoaded = true;\n                        }catch(e){}\n                    }\n\n                    function showOnly(step){\n                        [stepRole, stepVehicle, stepPrice, stepPhone, stepOtp].forEach(function(s){ s.classList.add('gp-hidden'); });\n                        step.classList.remove('gp-hidden');\n                    }\n                    function showErr(msg){ errBox.textContent = msg; errBox.style.display='block'; okBox.style.display='none'; }\n                    function showOk(msg){ okBox.textContent = msg; okBox.style.display='block'; errBox.style.display='none'; }\n                    function clearMsgs(){ errBox.style.display='none'; okBox.style.display='none'; errBox.textContent=''; okBox.textContent=''; }\n                    function setLoading(el, on){ el.style.display = on ? 'inline' : 'none'; }\n\n                    function formatWithCommas(d){ if(!d) return ''; d = d.replace(\/^0+\/, '') || '0'; return d.replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, ','); }\n                    function digitsOnly(v){ return (v||'').toString().replace(\/[^\\d]\/g, ''); }\n                    function setPriceFormatted(){ priceEl.value = formatWithCommas(digitsOnly(priceEl.value)); }\n\n                    function startResendCooldown(seconds){\n                        let s = seconds || 60;\n                        btnResend.disabled = true;\n                        const base = \"Tuma OTP Tena\";\n                        btnResend.textContent = base + ' (' + s + ')';\n                        clearInterval(resendTimer);\n                        resendTimer = setInterval(function(){\n                            s--;\n                            if(s <= 0){\n                                clearInterval(resendTimer);\n                                btnResend.disabled = false;\n                                btnResend.textContent = base;\n                            } else {\n                                btnResend.textContent = base + ' (' + s + ')';\n                            }\n                        }, 1000);\n                    }\n\n                    function renderResult(b, note){\n                        if(!b) return;\n                        if(resVehicle) resVehicle.textContent = b.vehicle_line || '';\n                        if(resPrice)    resPrice.textContent    = b.price || '\u2014';\n                        if(resStamp)    resStamp.textContent    = b.stamp_duty || '\u2014';\n                        if(resTransfer) resTransfer.textContent = b.transfer_fee || '\u2014';\n                        if(resCard)     resCard.textContent     = b.card_dup_fee || '\u2014';\n                        if(resTotal)    resTotal.textContent    = b.total || '\u2014';\n\n                        if(b.usajili){\n                            if(resUsajili) resUsajili.textContent = b.usajili;\n                            if(resUsajiliRow) resUsajiliRow.style.display = '';\n                        } else if(resUsajiliRow){ resUsajiliRow.style.display = 'none'; }\n\n                        if(b.region){\n                            if(resRegion) resRegion.textContent = b.region;\n                            if(resRegionRow) resRegionRow.style.display = '';\n                        } else if(resRegionRow){ resRegionRow.style.display = 'none'; }\n\n                        if(resNote) resNote.textContent = note || resultSmsNote;\n                    }\n\n                    function resetAll(){\n                        storedOwnerRole='';\n                        storedPriceDigits=''; storedPricePretty='';\n\n                        if(priceEl) priceEl.value='';\n                        if(nameEl) nameEl.value='';\n                        if(phoneEl && !skipOtp) phoneEl.value='';\n                        if(otpEl) otpEl.value='';\n\n                        clearMsgs();\n                        if(finalBox){ finalBox.style.display='none'; }\n\n                        if(btnPrice) btnPrice.disabled=false;\n                        if(btnVerify) btnVerify.disabled=false;\n                        if(btnResend){ btnResend.disabled=false; btnResend.textContent=\"Tuma OTP Tena\"; }\n                        clearInterval(resendTimer);\n                        setLoading(loadingPrice, false);\n                        setLoading(loadingOtp, false);\n\n                        roleOpts.forEach(function(x){ x.classList.remove('is-active'); });\n\n                        if(tsMake){ tsMake.clear(true); }\n                        if(tsModel){ tsModel.clear(true); tsModel.clearOptions(); tsModel.disable(); }\n                        if(tsYear){ tsYear.clear(true); }\n                        if(tsRegion){ tsRegion.clear(true); }\n                        if(tsUsajili){ tsUsajili.clear(true); }\n\n                        if(confirmPriceEl) confirmPriceEl.textContent='\u2014';\n                        if(otpPhoneEl) otpPhoneEl.textContent='\u2014';\n\n                        if(wrapForm) wrapForm.classList.remove('gp-hidden');\n                        showOnly(stepRole);\n                    }\n\n                    function openModal(){\n                        modal.classList.add('is-open');\n                        modal.setAttribute('aria-hidden','false');\n                        lockBody(true);\n                        if(!tsMake) initTomSelects();\n                        loadMakes();\n                        loadLookups();\n                    }\n                    function closeModal(){\n                        modal.classList.remove('is-open');\n                        modal.setAttribute('aria-hidden','true');\n                        lockBody(false);\n                        resetAll();\n                    }\n\n                    openBtn.addEventListener('click', openModal);\n                    closeBtn.addEventListener('click', closeModal);\n                    \/\/ Modal closes only via the X (close) button \u2014 no overlay-click or Escape close.\n\n                    roleOpts.forEach(function(el){\n                        el.addEventListener('click', function(){\n                            clearMsgs();\n                            roleOpts.forEach(function(x){ x.classList.remove('is-active'); });\n                            el.classList.add('is-active');\n                            storedOwnerRole = el.getAttribute('data-role') || '';\n                        });\n                    });\n\n                    priceEl.addEventListener('input', setPriceFormatted);\n\n                    \/\/ Step 1 (role) -> Step 2 (vehicle details)\n                    btnRole.addEventListener('click', function(){\n                        clearMsgs();\n                        if(!storedOwnerRole){ showErr('Tafadhali chagua kama wewe ni Mmiliki Wa Zamani (Seller) au Mmiliki Mpya (Buyer).'); return; }\n                        showOnly(stepVehicle);\n                    });\n                    backToRole.addEventListener('click', function(){ clearMsgs(); showOnly(stepRole); });\n\n                    \/\/ Step 2 (vehicle details) -> Step 3 (price)\n                    btnVehicle.addEventListener('click', function(){\n                        clearMsgs();\n                        if(!tsMake || !tsMake.getValue()){ showErr('Tafadhali chagua make ya gari.'); return; }\n                        if(!tsModel || !tsModel.getValue()){ showErr('Tafadhali chagua model ya gari.'); return; }\n                        if(!tsYear || !tsYear.getValue()){ showErr('Tafadhali chagua mwaka (year) wa gari.'); return; }\n                        if(!tsUsajili || !tsUsajili.getValue()){ showErr('Tafadhali chagua usajili.'); return; }\n                        showOnly(stepPrice);\n                        priceEl.focus();\n                    });\n                    backToVehicleFromPrice.addEventListener('click', function(){ clearMsgs(); showOnly(stepVehicle); });\n\n                    \/\/ Step 3 (price) -> Step 4 (name + phone)\n                    btnPrice.addEventListener('click', function(){\n                        clearMsgs();\n                        const d = digitsOnly(priceEl.value);\n                        if(!d || parseInt(d,10) <= 0){ showErr('Tafadhali weka bei sahihi.'); return; }\n                        storedPriceDigits = d;\n                        storedPricePretty = 'TSh ' + formatWithCommas(d);\n                        setLoading(loadingPrice, true);\n                        btnPrice.disabled = true;\n                        setTimeout(function(){\n                            setLoading(loadingPrice, false);\n                            btnPrice.disabled = false;\n                            confirmPriceEl.textContent = storedPricePretty;\n                            showOnly(stepPhone);\n                            if(nameEl) nameEl.focus();\n                        }, 500);\n                    });\n                    backToPrice.addEventListener('click', function(){\n                        clearMsgs(); showOnly(stepPrice); priceEl.focus();\n                        const val = priceEl.value || ''; priceEl.setSelectionRange(val.length, val.length);\n                    });\n\n                    \/\/ Step 5 -> 6 (request OTP)\n                    async function requestOtp(){\n                        const phone = (phoneEl.value || '').trim();\n                        setLoading(loadingOtp, true);\n                        const data = await apiPost('gp_vfees_send_otp', { phone: phone });\n                        setLoading(loadingOtp, false);\n                        if(data && data.success){\n                            showOk(\"Tumekutumia OTP kwa SMS.\");\n                            startResendCooldown((data.data && data.data.cooldown) ? data.data.cooldown : 60);\n                            return true;\n                        }\n                        const msg = (data && data.data && data.data.message) ? data.data.message : 'Imeshindikana kutuma OTP. Jaribu tena.';\n                        showErr(msg);\n                        return false;\n                    }\n\n                    btnPhone.addEventListener('click', async function(){\n                        clearMsgs();\n                        const nameRaw = (nameEl.value || '').trim();\n                        if(!nameRaw){ showErr('Tafadhali weka jina lako.'); return; }\n                        const phoneRaw = (phoneEl.value || '').trim();\n                        if(!phoneRaw){ showErr('Tafadhali weka namba ya simu.'); return; }\n\n                        if(skipOtp){\n                            \/\/ Logged-in user with on-file number: submit directly, no OTP step.\n                            btnPhone.disabled = true;\n                            setLoading(loadingPrice, false);\n                            await submitLead(btnPhone);\n                            btnPhone.disabled = false;\n                            return;\n                        }\n\n                        otpPhoneEl.textContent = phoneRaw;\n                        btnPhone.disabled = true;\n                        const ok = await requestOtp();\n                        btnPhone.disabled = false;\n                        if(ok){\n                            showOnly(stepOtp);\n                            if(otpEl) otpEl.focus();\n                        }\n                    });\n                    backToPhone.addEventListener('click', function(){\n                        clearMsgs(); showOnly(stepPhone); phoneEl.focus();\n                        const v = phoneEl.value || ''; phoneEl.setSelectionRange(v.length, v.length);\n                    });\n\n                    \/\/ Resend OTP\n                    btnResend.addEventListener('click', async function(){\n                        clearMsgs();\n                        await requestOtp();\n                    });\n\n                    \/\/ Shared submit: POST the lead, render the result screen. Used by both\n                    \/\/ the OTP path (verifyAndSubmit) and the skip-OTP path (logged-in users).\n                    async function submitLead(triggerBtn){\n                        setLoading(loadingOtp, true);\n\n                        const payload = {\n                            owner_role:    storedOwnerRole,\n                            vehicle_price: storedPriceDigits,\n                            name:          (nameEl.value || '').trim(),\n                            phone:         (phoneEl.value || '').trim(),\n                            otp:           (otpEl.value || '').trim(),\n                            make_id:       tsMake ? (tsMake.getValue() || '') : '',\n                            model_id:      tsModel ? (tsModel.getValue() || '') : '',\n                            year:          tsYear ? (tsYear.getValue() || '') : '',\n                            region_id:     tsRegion ? (tsRegion.getValue() || '') : '',\n                            usajili_id:    tsUsajili ? (tsUsajili.getValue() || '') : ''\n                        };\n\n                        try{\n                            const data = await apiPost('gp_vfees_submit', payload);\n                            const payloadData = (data && data.data) ? data.data : null;\n\n                            if(data && data.success){\n                                (function(){\n                                    try{\n                                        const k = 'gp_vfees_conv_fired_v1';\n                                        if(window.sessionStorage && window.sessionStorage.getItem(k) === '1') return;\n                                        const eventName = 'Usajili_lead_submitted_car';\n                                        const value = 1, currency = 'USD';\n                                        if(typeof window.gtag === 'function') window.gtag('event', eventName, { value:value, currency:currency });\n                                        if(window.dataLayer && Array.isArray(window.dataLayer)) window.dataLayer.push({ event:eventName, value:value, currency:currency });\n                                        if(typeof window.fbq === 'function') window.fbq('trackCustom', eventName, { value:value, currency:currency });\n                                        if(window.sessionStorage) window.sessionStorage.setItem(k, '1');\n                                    }catch(e){}\n                                })();\n\n                                renderResult(payloadData && payloadData.breakdown ? payloadData.breakdown : null, resultSmsNote);\n                                wrapForm.classList.add('gp-hidden');\n                                finalBox.style.display = 'block';\n                                return true;\n                            } else if(payloadData && payloadData.sms_failed_with_result && payloadData.breakdown){\n                                \/\/ Lead saved + result computed, but SMS failed: still show result with the failure note.\n                                renderResult(payloadData.breakdown, payloadData.message || resultSmsNote);\n                                wrapForm.classList.add('gp-hidden');\n                                finalBox.style.display = 'block';\n                                return true;\n                            } else {\n                                const msg = (payloadData && payloadData.message) ? payloadData.message : 'Imeshindikana. Tafadhali jaribu tena.';\n                                showErr(msg);\n                                return false;\n                            }\n                        }catch(e){\n                            showErr('Kuna tatizo la mtandao. Tafadhali jaribu tena.');\n                            return false;\n                        }finally{\n                            setLoading(loadingOtp, false);\n                        }\n                    }\n\n                    \/\/ Step 6: verify OTP + submit (logged-out flow)\n                    async function verifyAndSubmit(){\n                        clearMsgs();\n                        const otp = (otpEl.value || '').trim();\n                        if(!otp || otp.length < 4){ showErr('Tafadhali weka OTP uliyopokea kwa SMS.'); return; }\n\n                        btnVerify.disabled = true;\n                        btnResend.disabled = true;\n                        try{\n                            await submitLead(btnVerify);\n                        }finally{\n                            btnVerify.disabled = false;\n                            btnResend.disabled = false;\n                        }\n                    }\n                    btnVerify.addEventListener('click', verifyAndSubmit);\n\n                    \/\/ Enter key helpers\n                    priceEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPrice.click(); } });\n                    if(nameEl){ nameEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPhone.click(); } }); }\n                    phoneEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPhone.click(); } });\n                    otpEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnVerify.click(); } });\n\n                    \/\/ Initial state\n                    resetAll();\n                })();\n            <\/script>\n        <\/div>\n        <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-32df532 elementor-widget elementor-widget-text-editor\" data-id=\"32df532\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">&#8211; Baada ya kununua gari, kazi haishii pale unapokabidhiwa funguo. Ni muhimu kubadili umiliki\u00a0<\/span><a href=\"https:\/\/www.tra.go.tz\/\" target=\"_blank\" rel=\"noopener nofollow\">TRA\u00a0<\/a><span style=\"font-weight: 400;\">kutoka kwa mmiliki wa zamani kuja kwako mmiliki mpya.\u00a0<\/span><\/p><p style=\"text-align: left;\"><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-97a40dc elementor-widget elementor-widget-text-editor\" data-id=\"97a40dc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: left;\">\u00a0<\/p><h3 style=\"text-align: center;\"><strong>Jinsi ya Kubadili Umiliki Wa Gari Online TRA.<\/strong><\/h3><p>&#8211; Mwanzoni mwa mwaka 2025 <a href=\"https:\/\/www.tra.go.tz\/\" target=\"_blank\" rel=\"noopener nofollow\">TRA<\/a>\u00a0<span style=\"font-weight: 400;\">walitambulisha mfumo mpya wa kubadili umiliki wa vyombo vya moto uitwao IDRAS. Mfumo huo hutunza taarifa za umiliki wa vyombo vya moto kupitia TIN za wamiliki.<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0<\/span><\/p><p><span style=\"font-size: 16px; text-align: start;\">&#8211; Ili kubadili umiliki, mmiliki wa zamani kupitia anatakiwa aingine katika mfumo wa IDRAS, kisha kujaza taarifa za mauzo ya gari hilo kupitia TIN yake.\u00a0\u00a0<\/span><\/p><p><span style=\"font-size: 16px; text-align: start;\">\u00a0<\/span><\/p><div><span style=\"font-size: 16px; text-align: start;\">&#8211; Ikiwa atafanikiwa kikamilifu, mfumo wa TRA utamtolea Control namba, ambayo baada ya kulipiwa umiliki hubadilika na kuhamia kwenye TIN ya mmiliki mpya. Control namba hiyo hulipiwa kwa njia za malipo ya simu au benki.<\/span><\/div><div>\u00a0<\/div><div><span style=\"font-size: 16px; text-align: start;\">&#8211; Control namba ikilipiwa mmiliki mpya ataweza ku-download kadi mpya ya gari yenye jina lake kupitia akauni yake ya IDRAS iliyounganishwa na TIN yake.<\/span><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-53f8f17 vehicle_fees elementor-widget elementor-widget-shortcode\" data-id=\"53f8f17\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">        <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/tom-select@2.6.1\/dist\/css\/tom-select.css\">\n        <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/tom-select@2.6.1\/dist\/js\/tom-select.complete.min.js\"><\/script>\n\n        <div id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4\" class=\"gp-vfees-root\">\n            <style>\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4,\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 *{ color: #fff; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-launch{\n                    padding:12px 16px; border-radius:10px; border:0; cursor:pointer;\n                    background:#ff7a00; color:#fff; font-weight:900; display:block; margin:0 auto;\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-launch:hover{ background:#e56e00; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-modal{ position:fixed; inset:0; display:none; z-index:999999; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-modal.is-open{ display:flex; align-items:center; justify-content:center; padding:16px; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-modal__overlay{ position:absolute; inset:0; background:rgba(0,0,0,0.70); }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-modal__panel{\n                    position:relative; width:100%; max-width:620px; padding:0; border-radius:14px;\n                    overflow:hidden; z-index:1; background:#111;\n                    border:1px solid rgba(255,255,255,0.18); box-shadow:0 14px 40px rgba(0,0,0,0.65);\n                    max-height:90vh; display:flex; flex-direction:column;\n                }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-modal__head{\n                    display:flex; align-items:center; justify-content:space-between; gap:10px;\n                    padding:12px 14px; background:#0d0d0d; border-bottom:1px solid rgba(255,255,255,0.12);\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-modal__close{\n                    width:42px; height:42px; border-radius:12px; border:2px solid rgba(255,122,0,0.95);\n                    background:#ff7a00; color:#fff; cursor:pointer; font-weight:900; font-size:18px; line-height:1;\n                    display:flex; align-items:center; justify-content:center; box-shadow:0 10px 24px rgba(0,0,0,0.45);\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-modal__close:hover{ background:#e56e00; border-color:rgba(255,122,0,1); }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-modal__body{ padding:0; overflow-y:auto; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-vfees-steps{ max-width:100%; padding:16px; background:#121212; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-title{ margin:0; font-size:16px; font-weight:900; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 label{ display:block; font-size:13px; opacity:0.95; margin:10px 0 6px; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 input[type=\"text\"]{\n                    width:100%; padding:12px; border-radius:10px;\n                    border:1px solid rgba(255,255,255,0.22); background:rgba(0,0,0,0.30); color:#fff; outline:none;\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 input::placeholder{ color:rgba(255,255,255,0.70); }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-row{ display:flex; gap:10px; flex-wrap:wrap; margin-top:12px; align-items:center; justify-content:center; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 button.gp-btn{\n                    padding:12px 16px; border-radius:10px; border:0; cursor:pointer;\n                    background:#ff7a00; color:#fff; font-weight:800;\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 button.gp-btn:hover{ background:#e56e00; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 button.gp-btn:disabled{ opacity:0.7; cursor:not-allowed; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-loading{ display:none; margin-left:6px; font-size:13px; opacity:0.9; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-msg{\n                    margin-top:12px; padding:10px 12px; border-radius:10px; display:none;\n                    border:1px solid rgba(255,255,255,0.18); background:rgba(0,0,0,0.22);\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-msg.ok{ display:block; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-msg.err{ display:block; border-color:rgba(255,120,120,0.65); }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-hidden{ display:none !important; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-back{\n                    background:transparent !important; color:#ff7a00 !important; border:1px solid rgba(255,122,0,0.55) !important;\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-back:hover{ background:rgba(255,122,0,0.12) !important; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-confirm{\n                    margin-top:10px; padding:10px 12px; border-radius:10px;\n                    border:1px dashed rgba(255,255,255,0.22); font-size:13px; opacity:0.98; background:rgba(0,0,0,0.18);\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-confirm strong{ font-weight:900; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 input[readonly]{ opacity:0.85; cursor:not-allowed; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-phone-locked-note{ margin-top:6px; font-size:12px; opacity:0.8; }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-type-box{\n                    padding:12px; border-radius:12px; border:1px solid rgba(255,255,255,0.16); background:rgba(0,0,0,0.16);\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-type-title{ font-weight:900; margin:0 0 10px 0; font-size:15px; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-type-options{ display:flex; gap:10px; flex-wrap:wrap; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-type-opt{\n                    flex:1 1 140px; padding:12px 14px; border-radius:12px; border:1px solid rgba(255,255,255,0.20);\n                    background:rgba(0,0,0,0.18); cursor:pointer; font-weight:900; text-align:center; user-select:none;\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-type-opt:hover{ border-color:rgba(255,122,0,0.65); }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-type-opt.is-active{\n                    border-color:rgba(255,122,0,0.95); box-shadow:0 0 0 2px rgba(255,122,0,0.18) inset;\n                }\n\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-otp-box{\n                    padding:12px; border-radius:12px; border:1px solid rgba(255,255,255,0.16); background:rgba(0,0,0,0.16);\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-otp-title{ font-weight:900; margin:0 0 6px 0; font-size:15px; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-otp-text{ margin:0 0 10px 0; opacity:0.95; font-size:13px; }\n\n                \/* Result \/ success summary *\/\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-result-box{\n                    padding:14px; border-radius:12px; border:1px solid rgba(255,122,0,0.55); background:rgba(0,0,0,0.22);\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-result-title{\n                    font-weight:900; margin:0 0 4px 0; font-size:15px; color:#ff7a00 !important;\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-result-vehicle{ font-weight:900; margin:0 0 10px 0; font-size:14px; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-result-table{ width:100%; border-collapse:collapse; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-result-table td{ padding:7px 0; font-size:14px; border-bottom:1px solid rgba(255,255,255,0.10); }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-result-table td:last-child{ text-align:right; font-weight:700; white-space:nowrap; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-result-table tr.gp-result-total td{ border-bottom:0; padding-top:10px; font-size:16px; font-weight:900; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-result-table tr.gp-result-total td:last-child{ color:#ff7a00 !important; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .gp-result-note{\n                    margin-top:12px; padding:10px 12px; border-radius:10px;\n                    border:1px dashed rgba(255,122,0,0.55); font-size:13px; background:rgba(255,122,0,0.08);\n                }\n\n                \/* Tom Select dark theming inside the modal *\/\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .ts-wrapper{ margin-top:2px; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .ts-control{\n                    background:rgba(0,0,0,0.30) !important; border:1px solid rgba(255,255,255,0.22) !important;\n                    color:#fff !important; border-radius:10px !important; padding:8px 10px !important;\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .ts-control input,\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .ts-control .item{ color:#fff !important; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .ts-dropdown{\n                    background:#1b1b1b !important; color:#fff !important;\n                    border:1px solid rgba(255,255,255,0.22) !important;\n                }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .ts-dropdown .option{ color:#fff !important; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .ts-dropdown .active{ background:rgba(255,122,0,0.35) !important; }\n                #gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4 .ts-dropdown .optgroup-header{ color:rgba(255,255,255,0.6) !important; }\n            <\/style>\n\n            <button type=\"button\" class=\"gp-launch\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_open\">Kikokotoo Cha Gharama Za Kubadili Umiliki TRA<\/button>\n\n            <div class=\"gp-modal\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_modal\" aria-hidden=\"true\">\n                <div class=\"gp-modal__overlay\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_overlay\"><\/div>\n\n                <div class=\"gp-modal__panel\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_modal_title\">\n                    <div class=\"gp-modal__head\">\n                        <div class=\"gp-title\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_modal_title\">Kikokotoo Cha Gharama Za Kubadili Umiliki TRA<\/div>\n                        <button type=\"button\" class=\"gp-modal__close\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_close\" aria-label=\"Close\">\u2715<\/button>\n                    <\/div>\n\n                    <div class=\"gp-modal__body\">\n                        <div class=\"gp-vfees-steps\">\n                            <div id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_form\">\n\n                                <!-- Step 1: Owner role -->\n                                <div id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_step_role\">\n                                    <div class=\"gp-type-box\">\n                                        <div class=\"gp-type-title\">Wewe Ni Nani Kwenye Umiliki?<\/div>\n                                        <div class=\"gp-type-options\">\n                                            <div class=\"gp-type-opt\" data-role=\"seller\">Mmiliki Wa Zamani (Seller)<\/div>\n                                            <div class=\"gp-type-opt\" data-role=\"buyer\">Mmiliki Mpya (Buyer)<\/div>\n                                        <\/div>\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_btn_role\">Endelea<\/button>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 2: Vehicle details -->\n                                <div id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_step_vehicle\" class=\"gp-hidden\">\n                                    <div class=\"gp-type-box\">\n                                        <div class=\"gp-type-title\">Taarifa Za Gari<\/div>\n\n                                        <label for=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_make\">Make<\/label>\n                                        <select id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_make\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_model\">Model<\/label>\n                                        <select id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_model\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_year\">Mwaka (Year)<\/label>\n                                        <select id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_year\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_usajili\">Usajili<\/label>\n                                        <select id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_usajili\" placeholder=\"\u2014\"><\/select>\n\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_back_to_role\">\u2190 Rudi Nyuma<\/button>\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_btn_vehicle\">Endelea<\/button>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 3: Price -->\n                                <div id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_step_price\" class=\"gp-hidden\">\n                                    <label for=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_price\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_price_label\">Bei Ya Gari Kwenye Mkataba (TSh)<\/label>\n                                    <input id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_price\" type=\"text\" inputmode=\"numeric\" placeholder=\"Mfano: 25,000,000\" autocomplete=\"off\" \/>\n\n                                    <label for=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_region\">Limeuzwa Mkoa Gani?<\/label>\n                                    <select id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_region\" placeholder=\"\u2014\"><\/select>\n\n                                    <div class=\"gp-row\">\n                                        <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_back_to_vehicle_from_price\">\u2190 Rudi Nyuma<\/button>\n                                        <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_btn_price\">Piga Hesabu<\/button>\n                                        <span class=\"gp-loading\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_loading_price\">Inahesabu\u2026<\/span>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 5: Name + Phone -->\n                                <div id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_step_phone\" class=\"gp-hidden\">\n                                    <div class=\"gp-confirm\">\n                                        Hesabu ya gari yako ya <strong id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_confirm_price\">\u2014<\/strong> imekamilika.\n                                                                                Weka jina na namba ya simu \u2014 tutakutumia OTP kuthibitisha, kisha gharama zote za TRA kwa SMS (BURE).\n                                                                            <\/div>\n\n                                    <label for=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_name\">Jina Lako<\/label>\n                                    <input id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_name\" type=\"text\" inputmode=\"text\" placeholder=\"Mfano: John Mlay\" autocomplete=\"name\" \/>\n\n                                    <label for=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_phone\">Namba Ya Simu<\/label>\n                                    <input id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_phone\" type=\"text\" inputmode=\"tel\" placeholder=\"Mfano: 0712345678\" autocomplete=\"tel\" value=\"\" \/>\n                                    \n                                    <div class=\"gp-row\">\n                                        <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_back_to_price\">\u2190 Rudi Nyuma<\/button>\n                                        <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_btn_phone\">Endelea<\/button>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 6: OTP -->\n                                <div id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_step_otp\" class=\"gp-hidden\">\n                                    <div class=\"gp-otp-box\">\n                                        <div class=\"gp-otp-title\">THIBITISHA NAMBA YAKO<\/div>\n                                        <div class=\"gp-otp-text\">Tumekutumia namba ya uthibitisho (OTP) kwa SMS. Iingize hapa chini.<\/div>\n                                        <div class=\"gp-confirm\" style=\"margin-top:0;\">\n                                            Namba: <strong id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_otp_phone_num\">\u2014<\/strong>\n                                        <\/div>\n\n                                        <label for=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_otp\">Weka OTP<\/label>\n                                        <input id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_otp\" type=\"text\" inputmode=\"numeric\" maxlength=\"6\" placeholder=\"Mfano: 123456\" autocomplete=\"one-time-code\" \/>\n\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_back_to_phone\">\u2190 Rudi Nyuma<\/button>\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_btn_resend\">Tuma OTP Tena<\/button>\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_btn_verify\">Thibitisha &amp; Tuma<\/button>\n                                            <span class=\"gp-loading\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_loading_otp\">Inatuma\u2026<\/span>\n                                        <\/div>\n                                        <span style=\"display:inline;font-weight:normal;font-style:normal;color:inherit;font-size:10px;\">\n                                            Kwa kuthibitisha Unakubali kupokea SMS kutoka GariPesa na washirika wake.\n                                        <\/span>\n                                    <\/div>\n                                <\/div>\n\n                                <div class=\"gp-msg ok\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_ok\"><\/div>\n                                <div class=\"gp-msg err\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_err\"><\/div>\n                            <\/div>\n\n                            <!-- Success screen: result breakdown + SMS note -->\n                            <div id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_final\" style=\"display:none;\">\n                                <div class=\"gp-result-box\">\n                                    <div class=\"gp-result-title\">GHARAMA ZA TRA KUBADILI UMILIKI<\/div>\n                                    <div class=\"gp-result-vehicle\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_res_vehicle\"><\/div>\n                                    <table class=\"gp-result-table\">\n                                        <tbody>\n                                            <tr><td>Bei Ya Gari<\/td><td id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_res_price\">\u2014<\/td><\/tr>\n                                            <tr id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_res_usajili_row\" style=\"display:none;\"><td>Usajili<\/td><td id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_res_usajili\">\u2014<\/td><\/tr>\n                                            <tr id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_res_region_row\" style=\"display:none;\"><td>Mkoa<\/td><td id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_res_region\">\u2014<\/td><\/tr>\n                                            <tr><td>Stamp Duty<\/td><td id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_res_stamp\">\u2014<\/td><\/tr>\n                                            <tr><td>Transfer Fee<\/td><td id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_res_transfer\">\u2014<\/td><\/tr>\n                                            <tr><td>Card Mpya<\/td><td id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_res_card\">\u2014<\/td><\/tr>\n                                            <tr class=\"gp-result-total\"><td>JUMLA<\/td><td id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_res_total\">\u2014<\/td><\/tr>\n                                        <\/tbody>\n                                    <\/table>\n                                    <div class=\"gp-result-note\" id=\"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4_res_note\">Tumekutumia gharama hizi pia kwa SMS. Tafadhali angalia na hifadhi ujumbe huo kwenye simu yako kwa marejeo.<\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <script>\n                (function(){\n                    const uid     = \"gp_vfees_0f37ed3c-2ee0-4658-b5f1-029b2a50b5b4\";\n                    const ajaxUrl = \"https:\\\/\\\/garipesa.com\\\/wp-admin\\\/admin-ajax.php\";\n                    const skipOtp = false;\n\n                    const resultSmsNote   = \"Tumekutumia gharama hizi pia kwa SMS. Tafadhali angalia na hifadhi ujumbe huo kwenye simu yako kwa marejeo.\";\n\n                    const openBtn  = document.getElementById(uid + '_open');\n                    const modal    = document.getElementById(uid + '_modal');\n                    const overlay  = document.getElementById(uid + '_overlay');\n                    const closeBtn = document.getElementById(uid + '_close');\n                    const wrapForm = document.getElementById(uid + '_form');\n\n                    const stepRole    = document.getElementById(uid + '_step_role');\n                    const stepVehicle = document.getElementById(uid + '_step_vehicle');\n                    const stepPrice   = document.getElementById(uid + '_step_price');\n                    const stepPhone   = document.getElementById(uid + '_step_phone');\n                    const stepOtp     = document.getElementById(uid + '_step_otp');\n\n                    const priceEl = document.getElementById(uid + '_price');\n                    const priceLabelEl = document.getElementById(uid + '_price_label');\n                    const nameEl  = document.getElementById(uid + '_name');\n                    const phoneEl = document.getElementById(uid + '_phone');\n                    const otpEl   = document.getElementById(uid + '_otp');\n\n                    const btnRole    = document.getElementById(uid + '_btn_role');\n                    const btnVehicle = document.getElementById(uid + '_btn_vehicle');\n                    const btnPrice   = document.getElementById(uid + '_btn_price');\n                    const btnPhone   = document.getElementById(uid + '_btn_phone');\n                    const btnResend  = document.getElementById(uid + '_btn_resend');\n                    const btnVerify  = document.getElementById(uid + '_btn_verify');\n\n                    const backToRole              = document.getElementById(uid + '_back_to_role');\n                    const backToVehicleFromPrice  = document.getElementById(uid + '_back_to_vehicle_from_price');\n                    const backToPrice             = document.getElementById(uid + '_back_to_price');\n                    const backToPhone             = document.getElementById(uid + '_back_to_phone');\n\n                    const loadingPrice = document.getElementById(uid + '_loading_price');\n                    const loadingOtp   = document.getElementById(uid + '_loading_otp');\n\n                    const confirmPriceEl = document.getElementById(uid + '_confirm_price');\n                    const otpPhoneEl     = document.getElementById(uid + '_otp_phone_num');\n\n                    const okBox   = document.getElementById(uid + '_ok');\n                    const errBox  = document.getElementById(uid + '_err');\n                    const finalBox = document.getElementById(uid + '_final');\n\n                    \/\/ Result fields\n                    const resVehicle    = document.getElementById(uid + '_res_vehicle');\n                    const resPrice      = document.getElementById(uid + '_res_price');\n                    const resUsajiliRow = document.getElementById(uid + '_res_usajili_row');\n                    const resUsajili    = document.getElementById(uid + '_res_usajili');\n                    const resRegionRow  = document.getElementById(uid + '_res_region_row');\n                    const resRegion     = document.getElementById(uid + '_res_region');\n                    const resStamp      = document.getElementById(uid + '_res_stamp');\n                    const resTransfer   = document.getElementById(uid + '_res_transfer');\n                    const resCard       = document.getElementById(uid + '_res_card');\n                    const resTotal      = document.getElementById(uid + '_res_total');\n                    const resNote       = document.getElementById(uid + '_res_note');\n\n                    const roleOpts = Array.prototype.slice.call(document.querySelectorAll('#' + uid + ' .gp-type-opt[data-role]'));\n\n                    let storedOwnerRole = '';\n                    let storedPriceDigits = '';\n                    let storedPricePretty = '';\n\n                    let tsMake = null, tsModel = null, tsYear = null, tsRegion = null, tsUsajili = null;\n                    let cachedNonce = '';\n                    let makesLoaded = false;\n                    let lookupsLoaded = false;\n                    let resendTimer = null;\n\n                    function lockBody(lock){ try{ document.body.style.overflow = lock ? 'hidden' : ''; }catch(e){} }\n\n                    async function getNonce(force){\n                        if(cachedNonce && !force) return cachedNonce;\n                        const fd = new FormData();\n                        fd.append('action', 'gp_vfees_get_nonce');\n                        try{\n                            const res = await fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body:fd });\n                            const data = await res.json();\n                            if(data && data.success && data.data && data.data.nonce){\n                                cachedNonce = String(data.data.nonce);\n                                return cachedNonce;\n                            }\n                        }catch(e){}\n                        return '';\n                    }\n\n                    async function apiPost(action, extra){\n                        const nonce = await getNonce(false);\n                        const fd = new FormData();\n                        fd.append('action', action);\n                        fd.append('nonce', nonce);\n                        if(extra){ Object.keys(extra).forEach(function(k){ fd.append(k, extra[k]); }); }\n                        const res = await fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body:fd });\n                        return res.json();\n                    }\n\n                    function fillSelect(ts, items){\n                        ts.clearOptions();\n                        ts.clear(true);\n                        (items || []).forEach(function(it){\n                            ts.addOption({ value: String(it.id), text: it.name });\n                        });\n                        ts.refreshOptions(false);\n                    }\n\n                    function buildYears(ts){\n                        const now = new Date().getFullYear();\n                        const start = 1980;\n                        const opts = [];\n                        for(let y = now; y >= start; y--){ opts.push({ value:String(y), text:String(y) }); }\n                        ts.clearOptions();\n                        opts.forEach(function(o){ ts.addOption(o); });\n                        ts.refreshOptions(false);\n                    }\n\n                    function initTomSelects(){\n                        if(typeof TomSelect === 'undefined') return;\n                        const common = { create:false, maxOptions:1000, maxItems:1, hideSelected:true, closeAfterSelect:true, allowEmptyOption:false, plugins:[] };\n\n                        tsMake    = new TomSelect('#' + uid + '_make',    Object.assign({}, common, { placeholder:'Chagua make\u2026' }));\n                        tsModel   = new TomSelect('#' + uid + '_model',   Object.assign({}, common, { placeholder:'Chagua make kwanza\u2026' }));\n                        tsYear    = new TomSelect('#' + uid + '_year',    Object.assign({}, common, { placeholder:'Chagua mwaka\u2026' }));\n                        tsRegion  = new TomSelect('#' + uid + '_region',  Object.assign({}, common, { placeholder:'Chagua mkoa\u2026' }));\n                        tsUsajili = new TomSelect('#' + uid + '_usajili', Object.assign({}, common, { placeholder:'Chagua usajili\u2026' }));\n\n                        buildYears(tsYear);\n\n                        tsModel.disable();\n\n                        tsMake.on('change', async function(makeId){\n                            tsModel.clear(true);\n                            tsModel.clearOptions();\n                            tsModel.disable();\n                            if(!makeId){ return; }\n                            tsModel.settings.placeholder = 'Inapakia\u2026';\n                            tsModel.load && tsModel.load('');\n                            try{\n                                const data = await apiPost('gp_vfees_models', { make_id: makeId });\n                                if(data && data.success){\n                                    fillSelect(tsModel, data.data.items);\n                                    tsModel.enable();\n                                }\n                            }catch(e){}\n                        });\n                    }\n\n                    async function loadMakes(){\n                        if(makesLoaded || !tsMake) return;\n                        try{\n                            const data = await apiPost('gp_vfees_makes', {});\n                            if(data && data.success){\n                                fillSelect(tsMake, data.data.items);\n                                makesLoaded = true;\n                            }\n                        }catch(e){}\n                    }\n\n                    async function loadLookups(){\n                        if(lookupsLoaded) return;\n                        try{\n                            const [reg, usa] = await Promise.all([\n                                apiPost('gp_vfees_regions', {}),\n                                apiPost('gp_vfees_usajili', {})\n                            ]);\n                            if(reg && reg.success) fillSelect(tsRegion, reg.data.items);\n                            if(usa && usa.success) fillSelect(tsUsajili, usa.data.items);\n                            lookupsLoaded = true;\n                        }catch(e){}\n                    }\n\n                    function showOnly(step){\n                        [stepRole, stepVehicle, stepPrice, stepPhone, stepOtp].forEach(function(s){ s.classList.add('gp-hidden'); });\n                        step.classList.remove('gp-hidden');\n                    }\n                    function showErr(msg){ errBox.textContent = msg; errBox.style.display='block'; okBox.style.display='none'; }\n                    function showOk(msg){ okBox.textContent = msg; okBox.style.display='block'; errBox.style.display='none'; }\n                    function clearMsgs(){ errBox.style.display='none'; okBox.style.display='none'; errBox.textContent=''; okBox.textContent=''; }\n                    function setLoading(el, on){ el.style.display = on ? 'inline' : 'none'; }\n\n                    function formatWithCommas(d){ if(!d) return ''; d = d.replace(\/^0+\/, '') || '0'; return d.replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, ','); }\n                    function digitsOnly(v){ return (v||'').toString().replace(\/[^\\d]\/g, ''); }\n                    function setPriceFormatted(){ priceEl.value = formatWithCommas(digitsOnly(priceEl.value)); }\n\n                    function startResendCooldown(seconds){\n                        let s = seconds || 60;\n                        btnResend.disabled = true;\n                        const base = \"Tuma OTP Tena\";\n                        btnResend.textContent = base + ' (' + s + ')';\n                        clearInterval(resendTimer);\n                        resendTimer = setInterval(function(){\n                            s--;\n                            if(s <= 0){\n                                clearInterval(resendTimer);\n                                btnResend.disabled = false;\n                                btnResend.textContent = base;\n                            } else {\n                                btnResend.textContent = base + ' (' + s + ')';\n                            }\n                        }, 1000);\n                    }\n\n                    function renderResult(b, note){\n                        if(!b) return;\n                        if(resVehicle) resVehicle.textContent = b.vehicle_line || '';\n                        if(resPrice)    resPrice.textContent    = b.price || '\u2014';\n                        if(resStamp)    resStamp.textContent    = b.stamp_duty || '\u2014';\n                        if(resTransfer) resTransfer.textContent = b.transfer_fee || '\u2014';\n                        if(resCard)     resCard.textContent     = b.card_dup_fee || '\u2014';\n                        if(resTotal)    resTotal.textContent    = b.total || '\u2014';\n\n                        if(b.usajili){\n                            if(resUsajili) resUsajili.textContent = b.usajili;\n                            if(resUsajiliRow) resUsajiliRow.style.display = '';\n                        } else if(resUsajiliRow){ resUsajiliRow.style.display = 'none'; }\n\n                        if(b.region){\n                            if(resRegion) resRegion.textContent = b.region;\n                            if(resRegionRow) resRegionRow.style.display = '';\n                        } else if(resRegionRow){ resRegionRow.style.display = 'none'; }\n\n                        if(resNote) resNote.textContent = note || resultSmsNote;\n                    }\n\n                    function resetAll(){\n                        storedOwnerRole='';\n                        storedPriceDigits=''; storedPricePretty='';\n\n                        if(priceEl) priceEl.value='';\n                        if(nameEl) nameEl.value='';\n                        if(phoneEl && !skipOtp) phoneEl.value='';\n                        if(otpEl) otpEl.value='';\n\n                        clearMsgs();\n                        if(finalBox){ finalBox.style.display='none'; }\n\n                        if(btnPrice) btnPrice.disabled=false;\n                        if(btnVerify) btnVerify.disabled=false;\n                        if(btnResend){ btnResend.disabled=false; btnResend.textContent=\"Tuma OTP Tena\"; }\n                        clearInterval(resendTimer);\n                        setLoading(loadingPrice, false);\n                        setLoading(loadingOtp, false);\n\n                        roleOpts.forEach(function(x){ x.classList.remove('is-active'); });\n\n                        if(tsMake){ tsMake.clear(true); }\n                        if(tsModel){ tsModel.clear(true); tsModel.clearOptions(); tsModel.disable(); }\n                        if(tsYear){ tsYear.clear(true); }\n                        if(tsRegion){ tsRegion.clear(true); }\n                        if(tsUsajili){ tsUsajili.clear(true); }\n\n                        if(confirmPriceEl) confirmPriceEl.textContent='\u2014';\n                        if(otpPhoneEl) otpPhoneEl.textContent='\u2014';\n\n                        if(wrapForm) wrapForm.classList.remove('gp-hidden');\n                        showOnly(stepRole);\n                    }\n\n                    function openModal(){\n                        modal.classList.add('is-open');\n                        modal.setAttribute('aria-hidden','false');\n                        lockBody(true);\n                        if(!tsMake) initTomSelects();\n                        loadMakes();\n                        loadLookups();\n                    }\n                    function closeModal(){\n                        modal.classList.remove('is-open');\n                        modal.setAttribute('aria-hidden','true');\n                        lockBody(false);\n                        resetAll();\n                    }\n\n                    openBtn.addEventListener('click', openModal);\n                    closeBtn.addEventListener('click', closeModal);\n                    \/\/ Modal closes only via the X (close) button \u2014 no overlay-click or Escape close.\n\n                    roleOpts.forEach(function(el){\n                        el.addEventListener('click', function(){\n                            clearMsgs();\n                            roleOpts.forEach(function(x){ x.classList.remove('is-active'); });\n                            el.classList.add('is-active');\n                            storedOwnerRole = el.getAttribute('data-role') || '';\n                        });\n                    });\n\n                    priceEl.addEventListener('input', setPriceFormatted);\n\n                    \/\/ Step 1 (role) -> Step 2 (vehicle details)\n                    btnRole.addEventListener('click', function(){\n                        clearMsgs();\n                        if(!storedOwnerRole){ showErr('Tafadhali chagua kama wewe ni Mmiliki Wa Zamani (Seller) au Mmiliki Mpya (Buyer).'); return; }\n                        showOnly(stepVehicle);\n                    });\n                    backToRole.addEventListener('click', function(){ clearMsgs(); showOnly(stepRole); });\n\n                    \/\/ Step 2 (vehicle details) -> Step 3 (price)\n                    btnVehicle.addEventListener('click', function(){\n                        clearMsgs();\n                        if(!tsMake || !tsMake.getValue()){ showErr('Tafadhali chagua make ya gari.'); return; }\n                        if(!tsModel || !tsModel.getValue()){ showErr('Tafadhali chagua model ya gari.'); return; }\n                        if(!tsYear || !tsYear.getValue()){ showErr('Tafadhali chagua mwaka (year) wa gari.'); return; }\n                        if(!tsUsajili || !tsUsajili.getValue()){ showErr('Tafadhali chagua usajili.'); return; }\n                        showOnly(stepPrice);\n                        priceEl.focus();\n                    });\n                    backToVehicleFromPrice.addEventListener('click', function(){ clearMsgs(); showOnly(stepVehicle); });\n\n                    \/\/ Step 3 (price) -> Step 4 (name + phone)\n                    btnPrice.addEventListener('click', function(){\n                        clearMsgs();\n                        const d = digitsOnly(priceEl.value);\n                        if(!d || parseInt(d,10) <= 0){ showErr('Tafadhali weka bei sahihi.'); return; }\n                        storedPriceDigits = d;\n                        storedPricePretty = 'TSh ' + formatWithCommas(d);\n                        setLoading(loadingPrice, true);\n                        btnPrice.disabled = true;\n                        setTimeout(function(){\n                            setLoading(loadingPrice, false);\n                            btnPrice.disabled = false;\n                            confirmPriceEl.textContent = storedPricePretty;\n                            showOnly(stepPhone);\n                            if(nameEl) nameEl.focus();\n                        }, 500);\n                    });\n                    backToPrice.addEventListener('click', function(){\n                        clearMsgs(); showOnly(stepPrice); priceEl.focus();\n                        const val = priceEl.value || ''; priceEl.setSelectionRange(val.length, val.length);\n                    });\n\n                    \/\/ Step 5 -> 6 (request OTP)\n                    async function requestOtp(){\n                        const phone = (phoneEl.value || '').trim();\n                        setLoading(loadingOtp, true);\n                        const data = await apiPost('gp_vfees_send_otp', { phone: phone });\n                        setLoading(loadingOtp, false);\n                        if(data && data.success){\n                            showOk(\"Tumekutumia OTP kwa SMS.\");\n                            startResendCooldown((data.data && data.data.cooldown) ? data.data.cooldown : 60);\n                            return true;\n                        }\n                        const msg = (data && data.data && data.data.message) ? data.data.message : 'Imeshindikana kutuma OTP. Jaribu tena.';\n                        showErr(msg);\n                        return false;\n                    }\n\n                    btnPhone.addEventListener('click', async function(){\n                        clearMsgs();\n                        const nameRaw = (nameEl.value || '').trim();\n                        if(!nameRaw){ showErr('Tafadhali weka jina lako.'); return; }\n                        const phoneRaw = (phoneEl.value || '').trim();\n                        if(!phoneRaw){ showErr('Tafadhali weka namba ya simu.'); return; }\n\n                        if(skipOtp){\n                            \/\/ Logged-in user with on-file number: submit directly, no OTP step.\n                            btnPhone.disabled = true;\n                            setLoading(loadingPrice, false);\n                            await submitLead(btnPhone);\n                            btnPhone.disabled = false;\n                            return;\n                        }\n\n                        otpPhoneEl.textContent = phoneRaw;\n                        btnPhone.disabled = true;\n                        const ok = await requestOtp();\n                        btnPhone.disabled = false;\n                        if(ok){\n                            showOnly(stepOtp);\n                            if(otpEl) otpEl.focus();\n                        }\n                    });\n                    backToPhone.addEventListener('click', function(){\n                        clearMsgs(); showOnly(stepPhone); phoneEl.focus();\n                        const v = phoneEl.value || ''; phoneEl.setSelectionRange(v.length, v.length);\n                    });\n\n                    \/\/ Resend OTP\n                    btnResend.addEventListener('click', async function(){\n                        clearMsgs();\n                        await requestOtp();\n                    });\n\n                    \/\/ Shared submit: POST the lead, render the result screen. Used by both\n                    \/\/ the OTP path (verifyAndSubmit) and the skip-OTP path (logged-in users).\n                    async function submitLead(triggerBtn){\n                        setLoading(loadingOtp, true);\n\n                        const payload = {\n                            owner_role:    storedOwnerRole,\n                            vehicle_price: storedPriceDigits,\n                            name:          (nameEl.value || '').trim(),\n                            phone:         (phoneEl.value || '').trim(),\n                            otp:           (otpEl.value || '').trim(),\n                            make_id:       tsMake ? (tsMake.getValue() || '') : '',\n                            model_id:      tsModel ? (tsModel.getValue() || '') : '',\n                            year:          tsYear ? (tsYear.getValue() || '') : '',\n                            region_id:     tsRegion ? (tsRegion.getValue() || '') : '',\n                            usajili_id:    tsUsajili ? (tsUsajili.getValue() || '') : ''\n                        };\n\n                        try{\n                            const data = await apiPost('gp_vfees_submit', payload);\n                            const payloadData = (data && data.data) ? data.data : null;\n\n                            if(data && data.success){\n                                (function(){\n                                    try{\n                                        const k = 'gp_vfees_conv_fired_v1';\n                                        if(window.sessionStorage && window.sessionStorage.getItem(k) === '1') return;\n                                        const eventName = 'Usajili_lead_submitted_car';\n                                        const value = 1, currency = 'USD';\n                                        if(typeof window.gtag === 'function') window.gtag('event', eventName, { value:value, currency:currency });\n                                        if(window.dataLayer && Array.isArray(window.dataLayer)) window.dataLayer.push({ event:eventName, value:value, currency:currency });\n                                        if(typeof window.fbq === 'function') window.fbq('trackCustom', eventName, { value:value, currency:currency });\n                                        if(window.sessionStorage) window.sessionStorage.setItem(k, '1');\n                                    }catch(e){}\n                                })();\n\n                                renderResult(payloadData && payloadData.breakdown ? payloadData.breakdown : null, resultSmsNote);\n                                wrapForm.classList.add('gp-hidden');\n                                finalBox.style.display = 'block';\n                                return true;\n                            } else if(payloadData && payloadData.sms_failed_with_result && payloadData.breakdown){\n                                \/\/ Lead saved + result computed, but SMS failed: still show result with the failure note.\n                                renderResult(payloadData.breakdown, payloadData.message || resultSmsNote);\n                                wrapForm.classList.add('gp-hidden');\n                                finalBox.style.display = 'block';\n                                return true;\n                            } else {\n                                const msg = (payloadData && payloadData.message) ? payloadData.message : 'Imeshindikana. Tafadhali jaribu tena.';\n                                showErr(msg);\n                                return false;\n                            }\n                        }catch(e){\n                            showErr('Kuna tatizo la mtandao. Tafadhali jaribu tena.');\n                            return false;\n                        }finally{\n                            setLoading(loadingOtp, false);\n                        }\n                    }\n\n                    \/\/ Step 6: verify OTP + submit (logged-out flow)\n                    async function verifyAndSubmit(){\n                        clearMsgs();\n                        const otp = (otpEl.value || '').trim();\n                        if(!otp || otp.length < 4){ showErr('Tafadhali weka OTP uliyopokea kwa SMS.'); return; }\n\n                        btnVerify.disabled = true;\n                        btnResend.disabled = true;\n                        try{\n                            await submitLead(btnVerify);\n                        }finally{\n                            btnVerify.disabled = false;\n                            btnResend.disabled = false;\n                        }\n                    }\n                    btnVerify.addEventListener('click', verifyAndSubmit);\n\n                    \/\/ Enter key helpers\n                    priceEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPrice.click(); } });\n                    if(nameEl){ nameEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPhone.click(); } }); }\n                    phoneEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPhone.click(); } });\n                    otpEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnVerify.click(); } });\n\n                    \/\/ Initial state\n                    resetAll();\n                })();\n            <\/script>\n        <\/div>\n        <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1730128 elementor-widget elementor-widget-text-editor\" data-id=\"1730128\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\"><strong style=\"font-size: 16px;\">Gharama &amp; Nyaraka Muhimu Za Kubadili Umiliki wa Gari\u00a0<\/strong><\/h3><p>ili kuepuka maombi kukataliwa, au ucheleweshwaji wa huduma kutoka TRA,\u00a0 M<span style=\"font-weight: 400;\">miliki wa zamani atatakiwa kujaza taarifa na kuambatanisha nyaraka zifuatazo:<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0<\/span><\/p><h4 data-start=\"361\" data-end=\"430\"><strong data-start=\"366\" data-end=\"430\">1. Mkataba wa Mauziano ya Gari<\/strong><\/h4><p data-start=\"361\" data-end=\"430\">Mkataba wa mauziano ni ushahidi kwamba gari limeuzwa kutoka kwa mmiliki wa zamani kwenda kwa mmiliki mpya. Ni muhimu mkataba huu:\u00a0 usainiwe na pande zote mbili (muuzaji na mnunuzi), ugongwe muhuri wa mwanasheria, uambatane na risiti ya EFD kutoka kwa mwanasheria. Kama umepewa chombo hicho kama zawadi, urithi n.k itahitajika &#8220;Certificate of Gift&#8221; yenye muhuri na EFD receipt ya mwanasheria.\u00a0<\/p><p data-start=\"361\" data-end=\"430\">\u00a0<\/p><h4 data-start=\"848\" data-end=\"885\"><strong data-start=\"853\" data-end=\"885\">2. TIN ya Muuzaji na Mnunuzi\u00a0<\/strong><\/h4><p data-start=\"887\" data-end=\"996\">Namba ya utambulisho wa mlipakodi (TIN) ni sharti la lazima katika mfumo wa IDRAS. Hakikisha TIN za pande zote mbili zipo active na sahihi.<\/p><p data-start=\"887\" data-end=\"996\">\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6e63c8b elementor-widget elementor-widget-text-editor\" data-id=\"6e63c8b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: left;\"><strong style=\"font-size: 16px;\">3. Tax Clearence Certificate (Cheti Cha Mlipa Kodi)<\/strong><\/h3><p data-start=\"1310\" data-end=\"1430\">Ikiwa gari lilisajiliwa kwa matumizi ya biashara ni lazima mmiliki wa zamani awe na hati safi ya mlipa kodi (Tax Clearence).\u00a0 Cheti hiki ni uthibitisho kwamba gari alilouza halidaiwi kodi\u00a0<a href=\"https:\/\/www.tra.go.tz\/\" target=\"_blank\" rel=\"noopener nofollow\">TRA<\/a>. Ikiwa chombo hicho kina deni\u00a0<a href=\"https:\/\/www.tra.go.tz\/\" target=\"_blank\" rel=\"noopener nofollow\">TRA<\/a>,\u00a0 mmiliki wa zamani hataweza kupata Tax Clearence hivyo hamtaweza kubadilisha umiliki wa gari hilo.<\/p><p data-start=\"1310\" data-end=\"1430\">\u00a0<\/p><h3><span style=\"font-weight: bold; font-size: 16px;\" data-start=\"1267\" data-end=\"1308\">4. Gharama \/ Ada TRA Kubadili Umiliki wa Gari\u00a0<\/span><\/h3><p data-start=\"1310\" data-end=\"1430\">Gharama kuu tatu zinatakiwa kulipwa\u00a0<a href=\"https:\/\/www.tra.go.tz\/\" rel=\"nofollow noopener\" target=\"_blank\">TRA<\/a> ni Stamp Duty, Transfer Fee na Duplicate Card. Ada hizi hutofautiana kulingana na aina na bei ya gari.\u00a0<\/p><p data-start=\"1310\" data-end=\"1430\">Kwa kawaida gharama hizi hulipwa na mmiliki mpya wa gari. Malipo hufanyika mwishoni kabisa baada ya kupata control namba.<\/p><p data-start=\"1310\" data-end=\"1430\">\u00a0<\/p><p data-start=\"1310\" data-end=\"1430\">\u00a0Ni vyema mmiliki mpya ahakikishe ada hizi zimelipwa kwa wakati ili kuepuka faini.<\/p><p data-start=\"1310\" data-end=\"1430\">\u00a0<\/p><p data-start=\"1310\" data-end=\"1430\">Hapa <a href=\"http:\/\/garipesa.com\/\">Garipesa<\/a> tuna kikokotoo maalum cha kupiga hesabu ya\u00a0 ada utakazotakiwa kulipwa TRA kulingana na aina ya gari lako.\u00a0<\/p><p><span style=\"font-weight: 400;\">\u00a0<\/span><b style=\"text-align: center;\">\u00a0<\/b><b style=\"text-align: center;\">\u00a0<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0502875 vehicle_fees elementor-widget elementor-widget-shortcode\" data-id=\"0502875\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">        <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/tom-select@2.6.1\/dist\/css\/tom-select.css\">\n        <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/tom-select@2.6.1\/dist\/js\/tom-select.complete.min.js\"><\/script>\n\n        <div id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24\" class=\"gp-vfees-root\">\n            <style>\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24,\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 *{ color: #fff; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-launch{\n                    padding:12px 16px; border-radius:10px; border:0; cursor:pointer;\n                    background:#ff7a00; color:#fff; font-weight:900; display:block; margin:0 auto;\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-launch:hover{ background:#e56e00; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-modal{ position:fixed; inset:0; display:none; z-index:999999; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-modal.is-open{ display:flex; align-items:center; justify-content:center; padding:16px; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-modal__overlay{ position:absolute; inset:0; background:rgba(0,0,0,0.70); }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-modal__panel{\n                    position:relative; width:100%; max-width:620px; padding:0; border-radius:14px;\n                    overflow:hidden; z-index:1; background:#111;\n                    border:1px solid rgba(255,255,255,0.18); box-shadow:0 14px 40px rgba(0,0,0,0.65);\n                    max-height:90vh; display:flex; flex-direction:column;\n                }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-modal__head{\n                    display:flex; align-items:center; justify-content:space-between; gap:10px;\n                    padding:12px 14px; background:#0d0d0d; border-bottom:1px solid rgba(255,255,255,0.12);\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-modal__close{\n                    width:42px; height:42px; border-radius:12px; border:2px solid rgba(255,122,0,0.95);\n                    background:#ff7a00; color:#fff; cursor:pointer; font-weight:900; font-size:18px; line-height:1;\n                    display:flex; align-items:center; justify-content:center; box-shadow:0 10px 24px rgba(0,0,0,0.45);\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-modal__close:hover{ background:#e56e00; border-color:rgba(255,122,0,1); }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-modal__body{ padding:0; overflow-y:auto; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-vfees-steps{ max-width:100%; padding:16px; background:#121212; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-title{ margin:0; font-size:16px; font-weight:900; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 label{ display:block; font-size:13px; opacity:0.95; margin:10px 0 6px; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 input[type=\"text\"]{\n                    width:100%; padding:12px; border-radius:10px;\n                    border:1px solid rgba(255,255,255,0.22); background:rgba(0,0,0,0.30); color:#fff; outline:none;\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 input::placeholder{ color:rgba(255,255,255,0.70); }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-row{ display:flex; gap:10px; flex-wrap:wrap; margin-top:12px; align-items:center; justify-content:center; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 button.gp-btn{\n                    padding:12px 16px; border-radius:10px; border:0; cursor:pointer;\n                    background:#ff7a00; color:#fff; font-weight:800;\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 button.gp-btn:hover{ background:#e56e00; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 button.gp-btn:disabled{ opacity:0.7; cursor:not-allowed; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-loading{ display:none; margin-left:6px; font-size:13px; opacity:0.9; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-msg{\n                    margin-top:12px; padding:10px 12px; border-radius:10px; display:none;\n                    border:1px solid rgba(255,255,255,0.18); background:rgba(0,0,0,0.22);\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-msg.ok{ display:block; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-msg.err{ display:block; border-color:rgba(255,120,120,0.65); }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-hidden{ display:none !important; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-back{\n                    background:transparent !important; color:#ff7a00 !important; border:1px solid rgba(255,122,0,0.55) !important;\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-back:hover{ background:rgba(255,122,0,0.12) !important; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-confirm{\n                    margin-top:10px; padding:10px 12px; border-radius:10px;\n                    border:1px dashed rgba(255,255,255,0.22); font-size:13px; opacity:0.98; background:rgba(0,0,0,0.18);\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-confirm strong{ font-weight:900; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 input[readonly]{ opacity:0.85; cursor:not-allowed; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-phone-locked-note{ margin-top:6px; font-size:12px; opacity:0.8; }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-type-box{\n                    padding:12px; border-radius:12px; border:1px solid rgba(255,255,255,0.16); background:rgba(0,0,0,0.16);\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-type-title{ font-weight:900; margin:0 0 10px 0; font-size:15px; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-type-options{ display:flex; gap:10px; flex-wrap:wrap; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-type-opt{\n                    flex:1 1 140px; padding:12px 14px; border-radius:12px; border:1px solid rgba(255,255,255,0.20);\n                    background:rgba(0,0,0,0.18); cursor:pointer; font-weight:900; text-align:center; user-select:none;\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-type-opt:hover{ border-color:rgba(255,122,0,0.65); }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-type-opt.is-active{\n                    border-color:rgba(255,122,0,0.95); box-shadow:0 0 0 2px rgba(255,122,0,0.18) inset;\n                }\n\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-otp-box{\n                    padding:12px; border-radius:12px; border:1px solid rgba(255,255,255,0.16); background:rgba(0,0,0,0.16);\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-otp-title{ font-weight:900; margin:0 0 6px 0; font-size:15px; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-otp-text{ margin:0 0 10px 0; opacity:0.95; font-size:13px; }\n\n                \/* Result \/ success summary *\/\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-result-box{\n                    padding:14px; border-radius:12px; border:1px solid rgba(255,122,0,0.55); background:rgba(0,0,0,0.22);\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-result-title{\n                    font-weight:900; margin:0 0 4px 0; font-size:15px; color:#ff7a00 !important;\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-result-vehicle{ font-weight:900; margin:0 0 10px 0; font-size:14px; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-result-table{ width:100%; border-collapse:collapse; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-result-table td{ padding:7px 0; font-size:14px; border-bottom:1px solid rgba(255,255,255,0.10); }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-result-table td:last-child{ text-align:right; font-weight:700; white-space:nowrap; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-result-table tr.gp-result-total td{ border-bottom:0; padding-top:10px; font-size:16px; font-weight:900; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-result-table tr.gp-result-total td:last-child{ color:#ff7a00 !important; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .gp-result-note{\n                    margin-top:12px; padding:10px 12px; border-radius:10px;\n                    border:1px dashed rgba(255,122,0,0.55); font-size:13px; background:rgba(255,122,0,0.08);\n                }\n\n                \/* Tom Select dark theming inside the modal *\/\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .ts-wrapper{ margin-top:2px; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .ts-control{\n                    background:rgba(0,0,0,0.30) !important; border:1px solid rgba(255,255,255,0.22) !important;\n                    color:#fff !important; border-radius:10px !important; padding:8px 10px !important;\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .ts-control input,\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .ts-control .item{ color:#fff !important; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .ts-dropdown{\n                    background:#1b1b1b !important; color:#fff !important;\n                    border:1px solid rgba(255,255,255,0.22) !important;\n                }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .ts-dropdown .option{ color:#fff !important; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .ts-dropdown .active{ background:rgba(255,122,0,0.35) !important; }\n                #gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24 .ts-dropdown .optgroup-header{ color:rgba(255,255,255,0.6) !important; }\n            <\/style>\n\n            <button type=\"button\" class=\"gp-launch\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_open\">Kikokotoo Cha Gharama Za Kubadili Umiliki TRA<\/button>\n\n            <div class=\"gp-modal\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_modal\" aria-hidden=\"true\">\n                <div class=\"gp-modal__overlay\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_overlay\"><\/div>\n\n                <div class=\"gp-modal__panel\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_modal_title\">\n                    <div class=\"gp-modal__head\">\n                        <div class=\"gp-title\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_modal_title\">Kikokotoo Cha Gharama Za Kubadili Umiliki TRA<\/div>\n                        <button type=\"button\" class=\"gp-modal__close\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_close\" aria-label=\"Close\">\u2715<\/button>\n                    <\/div>\n\n                    <div class=\"gp-modal__body\">\n                        <div class=\"gp-vfees-steps\">\n                            <div id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_form\">\n\n                                <!-- Step 1: Owner role -->\n                                <div id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_step_role\">\n                                    <div class=\"gp-type-box\">\n                                        <div class=\"gp-type-title\">Wewe Ni Nani Kwenye Umiliki?<\/div>\n                                        <div class=\"gp-type-options\">\n                                            <div class=\"gp-type-opt\" data-role=\"seller\">Mmiliki Wa Zamani (Seller)<\/div>\n                                            <div class=\"gp-type-opt\" data-role=\"buyer\">Mmiliki Mpya (Buyer)<\/div>\n                                        <\/div>\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_btn_role\">Endelea<\/button>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 2: Vehicle details -->\n                                <div id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_step_vehicle\" class=\"gp-hidden\">\n                                    <div class=\"gp-type-box\">\n                                        <div class=\"gp-type-title\">Taarifa Za Gari<\/div>\n\n                                        <label for=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_make\">Make<\/label>\n                                        <select id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_make\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_model\">Model<\/label>\n                                        <select id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_model\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_year\">Mwaka (Year)<\/label>\n                                        <select id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_year\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_usajili\">Usajili<\/label>\n                                        <select id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_usajili\" placeholder=\"\u2014\"><\/select>\n\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_back_to_role\">\u2190 Rudi Nyuma<\/button>\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_btn_vehicle\">Endelea<\/button>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 3: Price -->\n                                <div id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_step_price\" class=\"gp-hidden\">\n                                    <label for=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_price\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_price_label\">Bei Ya Gari Kwenye Mkataba (TSh)<\/label>\n                                    <input id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_price\" type=\"text\" inputmode=\"numeric\" placeholder=\"Mfano: 25,000,000\" autocomplete=\"off\" \/>\n\n                                    <label for=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_region\">Limeuzwa Mkoa Gani?<\/label>\n                                    <select id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_region\" placeholder=\"\u2014\"><\/select>\n\n                                    <div class=\"gp-row\">\n                                        <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_back_to_vehicle_from_price\">\u2190 Rudi Nyuma<\/button>\n                                        <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_btn_price\">Piga Hesabu<\/button>\n                                        <span class=\"gp-loading\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_loading_price\">Inahesabu\u2026<\/span>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 5: Name + Phone -->\n                                <div id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_step_phone\" class=\"gp-hidden\">\n                                    <div class=\"gp-confirm\">\n                                        Hesabu ya gari yako ya <strong id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_confirm_price\">\u2014<\/strong> imekamilika.\n                                                                                Weka jina na namba ya simu \u2014 tutakutumia OTP kuthibitisha, kisha gharama zote za TRA kwa SMS (BURE).\n                                                                            <\/div>\n\n                                    <label for=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_name\">Jina Lako<\/label>\n                                    <input id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_name\" type=\"text\" inputmode=\"text\" placeholder=\"Mfano: John Mlay\" autocomplete=\"name\" \/>\n\n                                    <label for=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_phone\">Namba Ya Simu<\/label>\n                                    <input id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_phone\" type=\"text\" inputmode=\"tel\" placeholder=\"Mfano: 0712345678\" autocomplete=\"tel\" value=\"\" \/>\n                                    \n                                    <div class=\"gp-row\">\n                                        <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_back_to_price\">\u2190 Rudi Nyuma<\/button>\n                                        <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_btn_phone\">Endelea<\/button>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 6: OTP -->\n                                <div id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_step_otp\" class=\"gp-hidden\">\n                                    <div class=\"gp-otp-box\">\n                                        <div class=\"gp-otp-title\">THIBITISHA NAMBA YAKO<\/div>\n                                        <div class=\"gp-otp-text\">Tumekutumia namba ya uthibitisho (OTP) kwa SMS. Iingize hapa chini.<\/div>\n                                        <div class=\"gp-confirm\" style=\"margin-top:0;\">\n                                            Namba: <strong id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_otp_phone_num\">\u2014<\/strong>\n                                        <\/div>\n\n                                        <label for=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_otp\">Weka OTP<\/label>\n                                        <input id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_otp\" type=\"text\" inputmode=\"numeric\" maxlength=\"6\" placeholder=\"Mfano: 123456\" autocomplete=\"one-time-code\" \/>\n\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_back_to_phone\">\u2190 Rudi Nyuma<\/button>\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_btn_resend\">Tuma OTP Tena<\/button>\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_btn_verify\">Thibitisha &amp; Tuma<\/button>\n                                            <span class=\"gp-loading\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_loading_otp\">Inatuma\u2026<\/span>\n                                        <\/div>\n                                        <span style=\"display:inline;font-weight:normal;font-style:normal;color:inherit;font-size:10px;\">\n                                            Kwa kuthibitisha Unakubali kupokea SMS kutoka GariPesa na washirika wake.\n                                        <\/span>\n                                    <\/div>\n                                <\/div>\n\n                                <div class=\"gp-msg ok\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_ok\"><\/div>\n                                <div class=\"gp-msg err\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_err\"><\/div>\n                            <\/div>\n\n                            <!-- Success screen: result breakdown + SMS note -->\n                            <div id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_final\" style=\"display:none;\">\n                                <div class=\"gp-result-box\">\n                                    <div class=\"gp-result-title\">GHARAMA ZA TRA KUBADILI UMILIKI<\/div>\n                                    <div class=\"gp-result-vehicle\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_res_vehicle\"><\/div>\n                                    <table class=\"gp-result-table\">\n                                        <tbody>\n                                            <tr><td>Bei Ya Gari<\/td><td id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_res_price\">\u2014<\/td><\/tr>\n                                            <tr id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_res_usajili_row\" style=\"display:none;\"><td>Usajili<\/td><td id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_res_usajili\">\u2014<\/td><\/tr>\n                                            <tr id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_res_region_row\" style=\"display:none;\"><td>Mkoa<\/td><td id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_res_region\">\u2014<\/td><\/tr>\n                                            <tr><td>Stamp Duty<\/td><td id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_res_stamp\">\u2014<\/td><\/tr>\n                                            <tr><td>Transfer Fee<\/td><td id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_res_transfer\">\u2014<\/td><\/tr>\n                                            <tr><td>Card Mpya<\/td><td id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_res_card\">\u2014<\/td><\/tr>\n                                            <tr class=\"gp-result-total\"><td>JUMLA<\/td><td id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_res_total\">\u2014<\/td><\/tr>\n                                        <\/tbody>\n                                    <\/table>\n                                    <div class=\"gp-result-note\" id=\"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24_res_note\">Tumekutumia gharama hizi pia kwa SMS. Tafadhali angalia na hifadhi ujumbe huo kwenye simu yako kwa marejeo.<\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <script>\n                (function(){\n                    const uid     = \"gp_vfees_1fb6497d-c8b8-4ec3-a3e2-dc4d01493c24\";\n                    const ajaxUrl = \"https:\\\/\\\/garipesa.com\\\/wp-admin\\\/admin-ajax.php\";\n                    const skipOtp = false;\n\n                    const resultSmsNote   = \"Tumekutumia gharama hizi pia kwa SMS. Tafadhali angalia na hifadhi ujumbe huo kwenye simu yako kwa marejeo.\";\n\n                    const openBtn  = document.getElementById(uid + '_open');\n                    const modal    = document.getElementById(uid + '_modal');\n                    const overlay  = document.getElementById(uid + '_overlay');\n                    const closeBtn = document.getElementById(uid + '_close');\n                    const wrapForm = document.getElementById(uid + '_form');\n\n                    const stepRole    = document.getElementById(uid + '_step_role');\n                    const stepVehicle = document.getElementById(uid + '_step_vehicle');\n                    const stepPrice   = document.getElementById(uid + '_step_price');\n                    const stepPhone   = document.getElementById(uid + '_step_phone');\n                    const stepOtp     = document.getElementById(uid + '_step_otp');\n\n                    const priceEl = document.getElementById(uid + '_price');\n                    const priceLabelEl = document.getElementById(uid + '_price_label');\n                    const nameEl  = document.getElementById(uid + '_name');\n                    const phoneEl = document.getElementById(uid + '_phone');\n                    const otpEl   = document.getElementById(uid + '_otp');\n\n                    const btnRole    = document.getElementById(uid + '_btn_role');\n                    const btnVehicle = document.getElementById(uid + '_btn_vehicle');\n                    const btnPrice   = document.getElementById(uid + '_btn_price');\n                    const btnPhone   = document.getElementById(uid + '_btn_phone');\n                    const btnResend  = document.getElementById(uid + '_btn_resend');\n                    const btnVerify  = document.getElementById(uid + '_btn_verify');\n\n                    const backToRole              = document.getElementById(uid + '_back_to_role');\n                    const backToVehicleFromPrice  = document.getElementById(uid + '_back_to_vehicle_from_price');\n                    const backToPrice             = document.getElementById(uid + '_back_to_price');\n                    const backToPhone             = document.getElementById(uid + '_back_to_phone');\n\n                    const loadingPrice = document.getElementById(uid + '_loading_price');\n                    const loadingOtp   = document.getElementById(uid + '_loading_otp');\n\n                    const confirmPriceEl = document.getElementById(uid + '_confirm_price');\n                    const otpPhoneEl     = document.getElementById(uid + '_otp_phone_num');\n\n                    const okBox   = document.getElementById(uid + '_ok');\n                    const errBox  = document.getElementById(uid + '_err');\n                    const finalBox = document.getElementById(uid + '_final');\n\n                    \/\/ Result fields\n                    const resVehicle    = document.getElementById(uid + '_res_vehicle');\n                    const resPrice      = document.getElementById(uid + '_res_price');\n                    const resUsajiliRow = document.getElementById(uid + '_res_usajili_row');\n                    const resUsajili    = document.getElementById(uid + '_res_usajili');\n                    const resRegionRow  = document.getElementById(uid + '_res_region_row');\n                    const resRegion     = document.getElementById(uid + '_res_region');\n                    const resStamp      = document.getElementById(uid + '_res_stamp');\n                    const resTransfer   = document.getElementById(uid + '_res_transfer');\n                    const resCard       = document.getElementById(uid + '_res_card');\n                    const resTotal      = document.getElementById(uid + '_res_total');\n                    const resNote       = document.getElementById(uid + '_res_note');\n\n                    const roleOpts = Array.prototype.slice.call(document.querySelectorAll('#' + uid + ' .gp-type-opt[data-role]'));\n\n                    let storedOwnerRole = '';\n                    let storedPriceDigits = '';\n                    let storedPricePretty = '';\n\n                    let tsMake = null, tsModel = null, tsYear = null, tsRegion = null, tsUsajili = null;\n                    let cachedNonce = '';\n                    let makesLoaded = false;\n                    let lookupsLoaded = false;\n                    let resendTimer = null;\n\n                    function lockBody(lock){ try{ document.body.style.overflow = lock ? 'hidden' : ''; }catch(e){} }\n\n                    async function getNonce(force){\n                        if(cachedNonce && !force) return cachedNonce;\n                        const fd = new FormData();\n                        fd.append('action', 'gp_vfees_get_nonce');\n                        try{\n                            const res = await fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body:fd });\n                            const data = await res.json();\n                            if(data && data.success && data.data && data.data.nonce){\n                                cachedNonce = String(data.data.nonce);\n                                return cachedNonce;\n                            }\n                        }catch(e){}\n                        return '';\n                    }\n\n                    async function apiPost(action, extra){\n                        const nonce = await getNonce(false);\n                        const fd = new FormData();\n                        fd.append('action', action);\n                        fd.append('nonce', nonce);\n                        if(extra){ Object.keys(extra).forEach(function(k){ fd.append(k, extra[k]); }); }\n                        const res = await fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body:fd });\n                        return res.json();\n                    }\n\n                    function fillSelect(ts, items){\n                        ts.clearOptions();\n                        ts.clear(true);\n                        (items || []).forEach(function(it){\n                            ts.addOption({ value: String(it.id), text: it.name });\n                        });\n                        ts.refreshOptions(false);\n                    }\n\n                    function buildYears(ts){\n                        const now = new Date().getFullYear();\n                        const start = 1980;\n                        const opts = [];\n                        for(let y = now; y >= start; y--){ opts.push({ value:String(y), text:String(y) }); }\n                        ts.clearOptions();\n                        opts.forEach(function(o){ ts.addOption(o); });\n                        ts.refreshOptions(false);\n                    }\n\n                    function initTomSelects(){\n                        if(typeof TomSelect === 'undefined') return;\n                        const common = { create:false, maxOptions:1000, maxItems:1, hideSelected:true, closeAfterSelect:true, allowEmptyOption:false, plugins:[] };\n\n                        tsMake    = new TomSelect('#' + uid + '_make',    Object.assign({}, common, { placeholder:'Chagua make\u2026' }));\n                        tsModel   = new TomSelect('#' + uid + '_model',   Object.assign({}, common, { placeholder:'Chagua make kwanza\u2026' }));\n                        tsYear    = new TomSelect('#' + uid + '_year',    Object.assign({}, common, { placeholder:'Chagua mwaka\u2026' }));\n                        tsRegion  = new TomSelect('#' + uid + '_region',  Object.assign({}, common, { placeholder:'Chagua mkoa\u2026' }));\n                        tsUsajili = new TomSelect('#' + uid + '_usajili', Object.assign({}, common, { placeholder:'Chagua usajili\u2026' }));\n\n                        buildYears(tsYear);\n\n                        tsModel.disable();\n\n                        tsMake.on('change', async function(makeId){\n                            tsModel.clear(true);\n                            tsModel.clearOptions();\n                            tsModel.disable();\n                            if(!makeId){ return; }\n                            tsModel.settings.placeholder = 'Inapakia\u2026';\n                            tsModel.load && tsModel.load('');\n                            try{\n                                const data = await apiPost('gp_vfees_models', { make_id: makeId });\n                                if(data && data.success){\n                                    fillSelect(tsModel, data.data.items);\n                                    tsModel.enable();\n                                }\n                            }catch(e){}\n                        });\n                    }\n\n                    async function loadMakes(){\n                        if(makesLoaded || !tsMake) return;\n                        try{\n                            const data = await apiPost('gp_vfees_makes', {});\n                            if(data && data.success){\n                                fillSelect(tsMake, data.data.items);\n                                makesLoaded = true;\n                            }\n                        }catch(e){}\n                    }\n\n                    async function loadLookups(){\n                        if(lookupsLoaded) return;\n                        try{\n                            const [reg, usa] = await Promise.all([\n                                apiPost('gp_vfees_regions', {}),\n                                apiPost('gp_vfees_usajili', {})\n                            ]);\n                            if(reg && reg.success) fillSelect(tsRegion, reg.data.items);\n                            if(usa && usa.success) fillSelect(tsUsajili, usa.data.items);\n                            lookupsLoaded = true;\n                        }catch(e){}\n                    }\n\n                    function showOnly(step){\n                        [stepRole, stepVehicle, stepPrice, stepPhone, stepOtp].forEach(function(s){ s.classList.add('gp-hidden'); });\n                        step.classList.remove('gp-hidden');\n                    }\n                    function showErr(msg){ errBox.textContent = msg; errBox.style.display='block'; okBox.style.display='none'; }\n                    function showOk(msg){ okBox.textContent = msg; okBox.style.display='block'; errBox.style.display='none'; }\n                    function clearMsgs(){ errBox.style.display='none'; okBox.style.display='none'; errBox.textContent=''; okBox.textContent=''; }\n                    function setLoading(el, on){ el.style.display = on ? 'inline' : 'none'; }\n\n                    function formatWithCommas(d){ if(!d) return ''; d = d.replace(\/^0+\/, '') || '0'; return d.replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, ','); }\n                    function digitsOnly(v){ return (v||'').toString().replace(\/[^\\d]\/g, ''); }\n                    function setPriceFormatted(){ priceEl.value = formatWithCommas(digitsOnly(priceEl.value)); }\n\n                    function startResendCooldown(seconds){\n                        let s = seconds || 60;\n                        btnResend.disabled = true;\n                        const base = \"Tuma OTP Tena\";\n                        btnResend.textContent = base + ' (' + s + ')';\n                        clearInterval(resendTimer);\n                        resendTimer = setInterval(function(){\n                            s--;\n                            if(s <= 0){\n                                clearInterval(resendTimer);\n                                btnResend.disabled = false;\n                                btnResend.textContent = base;\n                            } else {\n                                btnResend.textContent = base + ' (' + s + ')';\n                            }\n                        }, 1000);\n                    }\n\n                    function renderResult(b, note){\n                        if(!b) return;\n                        if(resVehicle) resVehicle.textContent = b.vehicle_line || '';\n                        if(resPrice)    resPrice.textContent    = b.price || '\u2014';\n                        if(resStamp)    resStamp.textContent    = b.stamp_duty || '\u2014';\n                        if(resTransfer) resTransfer.textContent = b.transfer_fee || '\u2014';\n                        if(resCard)     resCard.textContent     = b.card_dup_fee || '\u2014';\n                        if(resTotal)    resTotal.textContent    = b.total || '\u2014';\n\n                        if(b.usajili){\n                            if(resUsajili) resUsajili.textContent = b.usajili;\n                            if(resUsajiliRow) resUsajiliRow.style.display = '';\n                        } else if(resUsajiliRow){ resUsajiliRow.style.display = 'none'; }\n\n                        if(b.region){\n                            if(resRegion) resRegion.textContent = b.region;\n                            if(resRegionRow) resRegionRow.style.display = '';\n                        } else if(resRegionRow){ resRegionRow.style.display = 'none'; }\n\n                        if(resNote) resNote.textContent = note || resultSmsNote;\n                    }\n\n                    function resetAll(){\n                        storedOwnerRole='';\n                        storedPriceDigits=''; storedPricePretty='';\n\n                        if(priceEl) priceEl.value='';\n                        if(nameEl) nameEl.value='';\n                        if(phoneEl && !skipOtp) phoneEl.value='';\n                        if(otpEl) otpEl.value='';\n\n                        clearMsgs();\n                        if(finalBox){ finalBox.style.display='none'; }\n\n                        if(btnPrice) btnPrice.disabled=false;\n                        if(btnVerify) btnVerify.disabled=false;\n                        if(btnResend){ btnResend.disabled=false; btnResend.textContent=\"Tuma OTP Tena\"; }\n                        clearInterval(resendTimer);\n                        setLoading(loadingPrice, false);\n                        setLoading(loadingOtp, false);\n\n                        roleOpts.forEach(function(x){ x.classList.remove('is-active'); });\n\n                        if(tsMake){ tsMake.clear(true); }\n                        if(tsModel){ tsModel.clear(true); tsModel.clearOptions(); tsModel.disable(); }\n                        if(tsYear){ tsYear.clear(true); }\n                        if(tsRegion){ tsRegion.clear(true); }\n                        if(tsUsajili){ tsUsajili.clear(true); }\n\n                        if(confirmPriceEl) confirmPriceEl.textContent='\u2014';\n                        if(otpPhoneEl) otpPhoneEl.textContent='\u2014';\n\n                        if(wrapForm) wrapForm.classList.remove('gp-hidden');\n                        showOnly(stepRole);\n                    }\n\n                    function openModal(){\n                        modal.classList.add('is-open');\n                        modal.setAttribute('aria-hidden','false');\n                        lockBody(true);\n                        if(!tsMake) initTomSelects();\n                        loadMakes();\n                        loadLookups();\n                    }\n                    function closeModal(){\n                        modal.classList.remove('is-open');\n                        modal.setAttribute('aria-hidden','true');\n                        lockBody(false);\n                        resetAll();\n                    }\n\n                    openBtn.addEventListener('click', openModal);\n                    closeBtn.addEventListener('click', closeModal);\n                    \/\/ Modal closes only via the X (close) button \u2014 no overlay-click or Escape close.\n\n                    roleOpts.forEach(function(el){\n                        el.addEventListener('click', function(){\n                            clearMsgs();\n                            roleOpts.forEach(function(x){ x.classList.remove('is-active'); });\n                            el.classList.add('is-active');\n                            storedOwnerRole = el.getAttribute('data-role') || '';\n                        });\n                    });\n\n                    priceEl.addEventListener('input', setPriceFormatted);\n\n                    \/\/ Step 1 (role) -> Step 2 (vehicle details)\n                    btnRole.addEventListener('click', function(){\n                        clearMsgs();\n                        if(!storedOwnerRole){ showErr('Tafadhali chagua kama wewe ni Mmiliki Wa Zamani (Seller) au Mmiliki Mpya (Buyer).'); return; }\n                        showOnly(stepVehicle);\n                    });\n                    backToRole.addEventListener('click', function(){ clearMsgs(); showOnly(stepRole); });\n\n                    \/\/ Step 2 (vehicle details) -> Step 3 (price)\n                    btnVehicle.addEventListener('click', function(){\n                        clearMsgs();\n                        if(!tsMake || !tsMake.getValue()){ showErr('Tafadhali chagua make ya gari.'); return; }\n                        if(!tsModel || !tsModel.getValue()){ showErr('Tafadhali chagua model ya gari.'); return; }\n                        if(!tsYear || !tsYear.getValue()){ showErr('Tafadhali chagua mwaka (year) wa gari.'); return; }\n                        if(!tsUsajili || !tsUsajili.getValue()){ showErr('Tafadhali chagua usajili.'); return; }\n                        showOnly(stepPrice);\n                        priceEl.focus();\n                    });\n                    backToVehicleFromPrice.addEventListener('click', function(){ clearMsgs(); showOnly(stepVehicle); });\n\n                    \/\/ Step 3 (price) -> Step 4 (name + phone)\n                    btnPrice.addEventListener('click', function(){\n                        clearMsgs();\n                        const d = digitsOnly(priceEl.value);\n                        if(!d || parseInt(d,10) <= 0){ showErr('Tafadhali weka bei sahihi.'); return; }\n                        storedPriceDigits = d;\n                        storedPricePretty = 'TSh ' + formatWithCommas(d);\n                        setLoading(loadingPrice, true);\n                        btnPrice.disabled = true;\n                        setTimeout(function(){\n                            setLoading(loadingPrice, false);\n                            btnPrice.disabled = false;\n                            confirmPriceEl.textContent = storedPricePretty;\n                            showOnly(stepPhone);\n                            if(nameEl) nameEl.focus();\n                        }, 500);\n                    });\n                    backToPrice.addEventListener('click', function(){\n                        clearMsgs(); showOnly(stepPrice); priceEl.focus();\n                        const val = priceEl.value || ''; priceEl.setSelectionRange(val.length, val.length);\n                    });\n\n                    \/\/ Step 5 -> 6 (request OTP)\n                    async function requestOtp(){\n                        const phone = (phoneEl.value || '').trim();\n                        setLoading(loadingOtp, true);\n                        const data = await apiPost('gp_vfees_send_otp', { phone: phone });\n                        setLoading(loadingOtp, false);\n                        if(data && data.success){\n                            showOk(\"Tumekutumia OTP kwa SMS.\");\n                            startResendCooldown((data.data && data.data.cooldown) ? data.data.cooldown : 60);\n                            return true;\n                        }\n                        const msg = (data && data.data && data.data.message) ? data.data.message : 'Imeshindikana kutuma OTP. Jaribu tena.';\n                        showErr(msg);\n                        return false;\n                    }\n\n                    btnPhone.addEventListener('click', async function(){\n                        clearMsgs();\n                        const nameRaw = (nameEl.value || '').trim();\n                        if(!nameRaw){ showErr('Tafadhali weka jina lako.'); return; }\n                        const phoneRaw = (phoneEl.value || '').trim();\n                        if(!phoneRaw){ showErr('Tafadhali weka namba ya simu.'); return; }\n\n                        if(skipOtp){\n                            \/\/ Logged-in user with on-file number: submit directly, no OTP step.\n                            btnPhone.disabled = true;\n                            setLoading(loadingPrice, false);\n                            await submitLead(btnPhone);\n                            btnPhone.disabled = false;\n                            return;\n                        }\n\n                        otpPhoneEl.textContent = phoneRaw;\n                        btnPhone.disabled = true;\n                        const ok = await requestOtp();\n                        btnPhone.disabled = false;\n                        if(ok){\n                            showOnly(stepOtp);\n                            if(otpEl) otpEl.focus();\n                        }\n                    });\n                    backToPhone.addEventListener('click', function(){\n                        clearMsgs(); showOnly(stepPhone); phoneEl.focus();\n                        const v = phoneEl.value || ''; phoneEl.setSelectionRange(v.length, v.length);\n                    });\n\n                    \/\/ Resend OTP\n                    btnResend.addEventListener('click', async function(){\n                        clearMsgs();\n                        await requestOtp();\n                    });\n\n                    \/\/ Shared submit: POST the lead, render the result screen. Used by both\n                    \/\/ the OTP path (verifyAndSubmit) and the skip-OTP path (logged-in users).\n                    async function submitLead(triggerBtn){\n                        setLoading(loadingOtp, true);\n\n                        const payload = {\n                            owner_role:    storedOwnerRole,\n                            vehicle_price: storedPriceDigits,\n                            name:          (nameEl.value || '').trim(),\n                            phone:         (phoneEl.value || '').trim(),\n                            otp:           (otpEl.value || '').trim(),\n                            make_id:       tsMake ? (tsMake.getValue() || '') : '',\n                            model_id:      tsModel ? (tsModel.getValue() || '') : '',\n                            year:          tsYear ? (tsYear.getValue() || '') : '',\n                            region_id:     tsRegion ? (tsRegion.getValue() || '') : '',\n                            usajili_id:    tsUsajili ? (tsUsajili.getValue() || '') : ''\n                        };\n\n                        try{\n                            const data = await apiPost('gp_vfees_submit', payload);\n                            const payloadData = (data && data.data) ? data.data : null;\n\n                            if(data && data.success){\n                                (function(){\n                                    try{\n                                        const k = 'gp_vfees_conv_fired_v1';\n                                        if(window.sessionStorage && window.sessionStorage.getItem(k) === '1') return;\n                                        const eventName = 'Usajili_lead_submitted_car';\n                                        const value = 1, currency = 'USD';\n                                        if(typeof window.gtag === 'function') window.gtag('event', eventName, { value:value, currency:currency });\n                                        if(window.dataLayer && Array.isArray(window.dataLayer)) window.dataLayer.push({ event:eventName, value:value, currency:currency });\n                                        if(typeof window.fbq === 'function') window.fbq('trackCustom', eventName, { value:value, currency:currency });\n                                        if(window.sessionStorage) window.sessionStorage.setItem(k, '1');\n                                    }catch(e){}\n                                })();\n\n                                renderResult(payloadData && payloadData.breakdown ? payloadData.breakdown : null, resultSmsNote);\n                                wrapForm.classList.add('gp-hidden');\n                                finalBox.style.display = 'block';\n                                return true;\n                            } else if(payloadData && payloadData.sms_failed_with_result && payloadData.breakdown){\n                                \/\/ Lead saved + result computed, but SMS failed: still show result with the failure note.\n                                renderResult(payloadData.breakdown, payloadData.message || resultSmsNote);\n                                wrapForm.classList.add('gp-hidden');\n                                finalBox.style.display = 'block';\n                                return true;\n                            } else {\n                                const msg = (payloadData && payloadData.message) ? payloadData.message : 'Imeshindikana. Tafadhali jaribu tena.';\n                                showErr(msg);\n                                return false;\n                            }\n                        }catch(e){\n                            showErr('Kuna tatizo la mtandao. Tafadhali jaribu tena.');\n                            return false;\n                        }finally{\n                            setLoading(loadingOtp, false);\n                        }\n                    }\n\n                    \/\/ Step 6: verify OTP + submit (logged-out flow)\n                    async function verifyAndSubmit(){\n                        clearMsgs();\n                        const otp = (otpEl.value || '').trim();\n                        if(!otp || otp.length < 4){ showErr('Tafadhali weka OTP uliyopokea kwa SMS.'); return; }\n\n                        btnVerify.disabled = true;\n                        btnResend.disabled = true;\n                        try{\n                            await submitLead(btnVerify);\n                        }finally{\n                            btnVerify.disabled = false;\n                            btnResend.disabled = false;\n                        }\n                    }\n                    btnVerify.addEventListener('click', verifyAndSubmit);\n\n                    \/\/ Enter key helpers\n                    priceEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPrice.click(); } });\n                    if(nameEl){ nameEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPhone.click(); } }); }\n                    phoneEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPhone.click(); } });\n                    otpEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnVerify.click(); } });\n\n                    \/\/ Initial state\n                    resetAll();\n                })();\n            <\/script>\n        <\/div>\n        <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7fd515c elementor-widget elementor-widget-heading\" data-id=\"7fd515c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Faida Kubadili Umiliki wa Gari<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f9ad044 elementor-widget elementor-widget-text-editor\" data-id=\"f9ad044\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">&#8211; <\/span><span style=\"font-weight: 400;\">Kisheria jina lililopo kwenye kadi ya gari ndio utambulisho wa mmiliki halali wa chombo hicho. Hivyo kama umenunua na hujabadilisha umiliki kuwa jina lako, kisheria wewe si mmiliki halali!<\/span><\/p><p><span style=\"font-weight: 400;\">\u00a0<\/span><\/p><p>Mmiliki mpya utajilinda dhidi ya matatizo ya kisheria ambayo huenda yalifanywa na mmiliki wa zamani.\u00a0<\/p><p><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1d878f1 elementor-widget elementor-widget-text-editor\" data-id=\"1d878f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: left;\">Ukibadili umiliki unajihakikishia gari ulilonunua limetoka kwa mmiliki halali, kwani ni mmiliki halali pekee ndo ataweza kuruhusu mabadiliko ya umiliki wa gari\u00a0<a href=\"https:\/\/www.tra.go.tz\/\" target=\"_blank\" rel=\"noopener nofollow\">TRA<\/a>.<\/p><p><span style=\"font-weight: 400;\">\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Mmiliki mpya atakua amejihakikishia kuwa gari alilonunua halina Deni\u00a0<\/span><a href=\"https:\/\/www.tra.go.tz\/\" target=\"_blank\" rel=\"noopener nofollow\">TRA<\/a><span style=\"font-weight: 400;\">, kwani kama kuna deni mabadiliko hayatafanikiwa hadi mmiliki wa zamani alipe deni la Gari hilo.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c82c9c9 elementor-widget elementor-widget-text-editor\" data-id=\"c82c9c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;\"><b>Hitimisho<\/b><\/h3>\n<p>Kubadili umiliki ni hatua muhimu baada ya mauzo, usipuuzie!&nbsp;<span style=\"font-weight: 400;\">Baada ya kubadili umiliki, wasiliana na kampuni ya bima U-cancel bima iliyokuwepo na uweze kukata bima mpya kwa jina lako.&nbsp;<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-36ffbc2 vehicle_fees elementor-widget elementor-widget-shortcode\" data-id=\"36ffbc2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">        <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/tom-select@2.6.1\/dist\/css\/tom-select.css\">\n        <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/tom-select@2.6.1\/dist\/js\/tom-select.complete.min.js\"><\/script>\n\n        <div id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c\" class=\"gp-vfees-root\">\n            <style>\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c,\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c *{ color: #fff; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-launch{\n                    padding:12px 16px; border-radius:10px; border:0; cursor:pointer;\n                    background:#ff7a00; color:#fff; font-weight:900; display:block; margin:0 auto;\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-launch:hover{ background:#e56e00; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-modal{ position:fixed; inset:0; display:none; z-index:999999; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-modal.is-open{ display:flex; align-items:center; justify-content:center; padding:16px; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-modal__overlay{ position:absolute; inset:0; background:rgba(0,0,0,0.70); }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-modal__panel{\n                    position:relative; width:100%; max-width:620px; padding:0; border-radius:14px;\n                    overflow:hidden; z-index:1; background:#111;\n                    border:1px solid rgba(255,255,255,0.18); box-shadow:0 14px 40px rgba(0,0,0,0.65);\n                    max-height:90vh; display:flex; flex-direction:column;\n                }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-modal__head{\n                    display:flex; align-items:center; justify-content:space-between; gap:10px;\n                    padding:12px 14px; background:#0d0d0d; border-bottom:1px solid rgba(255,255,255,0.12);\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-modal__close{\n                    width:42px; height:42px; border-radius:12px; border:2px solid rgba(255,122,0,0.95);\n                    background:#ff7a00; color:#fff; cursor:pointer; font-weight:900; font-size:18px; line-height:1;\n                    display:flex; align-items:center; justify-content:center; box-shadow:0 10px 24px rgba(0,0,0,0.45);\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-modal__close:hover{ background:#e56e00; border-color:rgba(255,122,0,1); }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-modal__body{ padding:0; overflow-y:auto; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-vfees-steps{ max-width:100%; padding:16px; background:#121212; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-title{ margin:0; font-size:16px; font-weight:900; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c label{ display:block; font-size:13px; opacity:0.95; margin:10px 0 6px; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c input[type=\"text\"]{\n                    width:100%; padding:12px; border-radius:10px;\n                    border:1px solid rgba(255,255,255,0.22); background:rgba(0,0,0,0.30); color:#fff; outline:none;\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c input::placeholder{ color:rgba(255,255,255,0.70); }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-row{ display:flex; gap:10px; flex-wrap:wrap; margin-top:12px; align-items:center; justify-content:center; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c button.gp-btn{\n                    padding:12px 16px; border-radius:10px; border:0; cursor:pointer;\n                    background:#ff7a00; color:#fff; font-weight:800;\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c button.gp-btn:hover{ background:#e56e00; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c button.gp-btn:disabled{ opacity:0.7; cursor:not-allowed; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-loading{ display:none; margin-left:6px; font-size:13px; opacity:0.9; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-msg{\n                    margin-top:12px; padding:10px 12px; border-radius:10px; display:none;\n                    border:1px solid rgba(255,255,255,0.18); background:rgba(0,0,0,0.22);\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-msg.ok{ display:block; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-msg.err{ display:block; border-color:rgba(255,120,120,0.65); }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-hidden{ display:none !important; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-back{\n                    background:transparent !important; color:#ff7a00 !important; border:1px solid rgba(255,122,0,0.55) !important;\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-back:hover{ background:rgba(255,122,0,0.12) !important; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-confirm{\n                    margin-top:10px; padding:10px 12px; border-radius:10px;\n                    border:1px dashed rgba(255,255,255,0.22); font-size:13px; opacity:0.98; background:rgba(0,0,0,0.18);\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-confirm strong{ font-weight:900; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c input[readonly]{ opacity:0.85; cursor:not-allowed; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-phone-locked-note{ margin-top:6px; font-size:12px; opacity:0.8; }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-type-box{\n                    padding:12px; border-radius:12px; border:1px solid rgba(255,255,255,0.16); background:rgba(0,0,0,0.16);\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-type-title{ font-weight:900; margin:0 0 10px 0; font-size:15px; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-type-options{ display:flex; gap:10px; flex-wrap:wrap; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-type-opt{\n                    flex:1 1 140px; padding:12px 14px; border-radius:12px; border:1px solid rgba(255,255,255,0.20);\n                    background:rgba(0,0,0,0.18); cursor:pointer; font-weight:900; text-align:center; user-select:none;\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-type-opt:hover{ border-color:rgba(255,122,0,0.65); }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-type-opt.is-active{\n                    border-color:rgba(255,122,0,0.95); box-shadow:0 0 0 2px rgba(255,122,0,0.18) inset;\n                }\n\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-otp-box{\n                    padding:12px; border-radius:12px; border:1px solid rgba(255,255,255,0.16); background:rgba(0,0,0,0.16);\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-otp-title{ font-weight:900; margin:0 0 6px 0; font-size:15px; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-otp-text{ margin:0 0 10px 0; opacity:0.95; font-size:13px; }\n\n                \/* Result \/ success summary *\/\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-result-box{\n                    padding:14px; border-radius:12px; border:1px solid rgba(255,122,0,0.55); background:rgba(0,0,0,0.22);\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-result-title{\n                    font-weight:900; margin:0 0 4px 0; font-size:15px; color:#ff7a00 !important;\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-result-vehicle{ font-weight:900; margin:0 0 10px 0; font-size:14px; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-result-table{ width:100%; border-collapse:collapse; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-result-table td{ padding:7px 0; font-size:14px; border-bottom:1px solid rgba(255,255,255,0.10); }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-result-table td:last-child{ text-align:right; font-weight:700; white-space:nowrap; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-result-table tr.gp-result-total td{ border-bottom:0; padding-top:10px; font-size:16px; font-weight:900; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-result-table tr.gp-result-total td:last-child{ color:#ff7a00 !important; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .gp-result-note{\n                    margin-top:12px; padding:10px 12px; border-radius:10px;\n                    border:1px dashed rgba(255,122,0,0.55); font-size:13px; background:rgba(255,122,0,0.08);\n                }\n\n                \/* Tom Select dark theming inside the modal *\/\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .ts-wrapper{ margin-top:2px; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .ts-control{\n                    background:rgba(0,0,0,0.30) !important; border:1px solid rgba(255,255,255,0.22) !important;\n                    color:#fff !important; border-radius:10px !important; padding:8px 10px !important;\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .ts-control input,\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .ts-control .item{ color:#fff !important; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .ts-dropdown{\n                    background:#1b1b1b !important; color:#fff !important;\n                    border:1px solid rgba(255,255,255,0.22) !important;\n                }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .ts-dropdown .option{ color:#fff !important; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .ts-dropdown .active{ background:rgba(255,122,0,0.35) !important; }\n                #gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c .ts-dropdown .optgroup-header{ color:rgba(255,255,255,0.6) !important; }\n            <\/style>\n\n            <button type=\"button\" class=\"gp-launch\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_open\">Kikokotoo Cha Gharama Za Kubadili Umiliki TRA<\/button>\n\n            <div class=\"gp-modal\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_modal\" aria-hidden=\"true\">\n                <div class=\"gp-modal__overlay\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_overlay\"><\/div>\n\n                <div class=\"gp-modal__panel\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_modal_title\">\n                    <div class=\"gp-modal__head\">\n                        <div class=\"gp-title\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_modal_title\">Kikokotoo Cha Gharama Za Kubadili Umiliki TRA<\/div>\n                        <button type=\"button\" class=\"gp-modal__close\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_close\" aria-label=\"Close\">\u2715<\/button>\n                    <\/div>\n\n                    <div class=\"gp-modal__body\">\n                        <div class=\"gp-vfees-steps\">\n                            <div id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_form\">\n\n                                <!-- Step 1: Owner role -->\n                                <div id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_step_role\">\n                                    <div class=\"gp-type-box\">\n                                        <div class=\"gp-type-title\">Wewe Ni Nani Kwenye Umiliki?<\/div>\n                                        <div class=\"gp-type-options\">\n                                            <div class=\"gp-type-opt\" data-role=\"seller\">Mmiliki Wa Zamani (Seller)<\/div>\n                                            <div class=\"gp-type-opt\" data-role=\"buyer\">Mmiliki Mpya (Buyer)<\/div>\n                                        <\/div>\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_btn_role\">Endelea<\/button>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 2: Vehicle details -->\n                                <div id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_step_vehicle\" class=\"gp-hidden\">\n                                    <div class=\"gp-type-box\">\n                                        <div class=\"gp-type-title\">Taarifa Za Gari<\/div>\n\n                                        <label for=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_make\">Make<\/label>\n                                        <select id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_make\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_model\">Model<\/label>\n                                        <select id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_model\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_year\">Mwaka (Year)<\/label>\n                                        <select id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_year\" placeholder=\"\u2014\"><\/select>\n\n                                        <label for=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_usajili\">Usajili<\/label>\n                                        <select id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_usajili\" placeholder=\"\u2014\"><\/select>\n\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_back_to_role\">\u2190 Rudi Nyuma<\/button>\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_btn_vehicle\">Endelea<\/button>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 3: Price -->\n                                <div id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_step_price\" class=\"gp-hidden\">\n                                    <label for=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_price\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_price_label\">Bei Ya Gari Kwenye Mkataba (TSh)<\/label>\n                                    <input id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_price\" type=\"text\" inputmode=\"numeric\" placeholder=\"Mfano: 25,000,000\" autocomplete=\"off\" \/>\n\n                                    <label for=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_region\">Limeuzwa Mkoa Gani?<\/label>\n                                    <select id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_region\" placeholder=\"\u2014\"><\/select>\n\n                                    <div class=\"gp-row\">\n                                        <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_back_to_vehicle_from_price\">\u2190 Rudi Nyuma<\/button>\n                                        <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_btn_price\">Piga Hesabu<\/button>\n                                        <span class=\"gp-loading\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_loading_price\">Inahesabu\u2026<\/span>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 5: Name + Phone -->\n                                <div id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_step_phone\" class=\"gp-hidden\">\n                                    <div class=\"gp-confirm\">\n                                        Hesabu ya gari yako ya <strong id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_confirm_price\">\u2014<\/strong> imekamilika.\n                                                                                Weka jina na namba ya simu \u2014 tutakutumia OTP kuthibitisha, kisha gharama zote za TRA kwa SMS (BURE).\n                                                                            <\/div>\n\n                                    <label for=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_name\">Jina Lako<\/label>\n                                    <input id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_name\" type=\"text\" inputmode=\"text\" placeholder=\"Mfano: John Mlay\" autocomplete=\"name\" \/>\n\n                                    <label for=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_phone\">Namba Ya Simu<\/label>\n                                    <input id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_phone\" type=\"text\" inputmode=\"tel\" placeholder=\"Mfano: 0712345678\" autocomplete=\"tel\" value=\"\" \/>\n                                    \n                                    <div class=\"gp-row\">\n                                        <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_back_to_price\">\u2190 Rudi Nyuma<\/button>\n                                        <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_btn_phone\">Endelea<\/button>\n                                    <\/div>\n                                <\/div>\n\n                                <!-- Step 6: OTP -->\n                                <div id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_step_otp\" class=\"gp-hidden\">\n                                    <div class=\"gp-otp-box\">\n                                        <div class=\"gp-otp-title\">THIBITISHA NAMBA YAKO<\/div>\n                                        <div class=\"gp-otp-text\">Tumekutumia namba ya uthibitisho (OTP) kwa SMS. Iingize hapa chini.<\/div>\n                                        <div class=\"gp-confirm\" style=\"margin-top:0;\">\n                                            Namba: <strong id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_otp_phone_num\">\u2014<\/strong>\n                                        <\/div>\n\n                                        <label for=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_otp\">Weka OTP<\/label>\n                                        <input id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_otp\" type=\"text\" inputmode=\"numeric\" maxlength=\"6\" placeholder=\"Mfano: 123456\" autocomplete=\"one-time-code\" \/>\n\n                                        <div class=\"gp-row\" style=\"margin-top:12px;\">\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_back_to_phone\">\u2190 Rudi Nyuma<\/button>\n                                            <button type=\"button\" class=\"gp-btn gp-back\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_btn_resend\">Tuma OTP Tena<\/button>\n                                            <button type=\"button\" class=\"gp-btn\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_btn_verify\">Thibitisha &amp; Tuma<\/button>\n                                            <span class=\"gp-loading\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_loading_otp\">Inatuma\u2026<\/span>\n                                        <\/div>\n                                        <span style=\"display:inline;font-weight:normal;font-style:normal;color:inherit;font-size:10px;\">\n                                            Kwa kuthibitisha Unakubali kupokea SMS kutoka GariPesa na washirika wake.\n                                        <\/span>\n                                    <\/div>\n                                <\/div>\n\n                                <div class=\"gp-msg ok\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_ok\"><\/div>\n                                <div class=\"gp-msg err\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_err\"><\/div>\n                            <\/div>\n\n                            <!-- Success screen: result breakdown + SMS note -->\n                            <div id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_final\" style=\"display:none;\">\n                                <div class=\"gp-result-box\">\n                                    <div class=\"gp-result-title\">GHARAMA ZA TRA KUBADILI UMILIKI<\/div>\n                                    <div class=\"gp-result-vehicle\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_res_vehicle\"><\/div>\n                                    <table class=\"gp-result-table\">\n                                        <tbody>\n                                            <tr><td>Bei Ya Gari<\/td><td id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_res_price\">\u2014<\/td><\/tr>\n                                            <tr id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_res_usajili_row\" style=\"display:none;\"><td>Usajili<\/td><td id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_res_usajili\">\u2014<\/td><\/tr>\n                                            <tr id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_res_region_row\" style=\"display:none;\"><td>Mkoa<\/td><td id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_res_region\">\u2014<\/td><\/tr>\n                                            <tr><td>Stamp Duty<\/td><td id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_res_stamp\">\u2014<\/td><\/tr>\n                                            <tr><td>Transfer Fee<\/td><td id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_res_transfer\">\u2014<\/td><\/tr>\n                                            <tr><td>Card Mpya<\/td><td id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_res_card\">\u2014<\/td><\/tr>\n                                            <tr class=\"gp-result-total\"><td>JUMLA<\/td><td id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_res_total\">\u2014<\/td><\/tr>\n                                        <\/tbody>\n                                    <\/table>\n                                    <div class=\"gp-result-note\" id=\"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c_res_note\">Tumekutumia gharama hizi pia kwa SMS. Tafadhali angalia na hifadhi ujumbe huo kwenye simu yako kwa marejeo.<\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <script>\n                (function(){\n                    const uid     = \"gp_vfees_4c72414c-1d24-42f8-9383-54f27b77644c\";\n                    const ajaxUrl = \"https:\\\/\\\/garipesa.com\\\/wp-admin\\\/admin-ajax.php\";\n                    const skipOtp = false;\n\n                    const resultSmsNote   = \"Tumekutumia gharama hizi pia kwa SMS. Tafadhali angalia na hifadhi ujumbe huo kwenye simu yako kwa marejeo.\";\n\n                    const openBtn  = document.getElementById(uid + '_open');\n                    const modal    = document.getElementById(uid + '_modal');\n                    const overlay  = document.getElementById(uid + '_overlay');\n                    const closeBtn = document.getElementById(uid + '_close');\n                    const wrapForm = document.getElementById(uid + '_form');\n\n                    const stepRole    = document.getElementById(uid + '_step_role');\n                    const stepVehicle = document.getElementById(uid + '_step_vehicle');\n                    const stepPrice   = document.getElementById(uid + '_step_price');\n                    const stepPhone   = document.getElementById(uid + '_step_phone');\n                    const stepOtp     = document.getElementById(uid + '_step_otp');\n\n                    const priceEl = document.getElementById(uid + '_price');\n                    const priceLabelEl = document.getElementById(uid + '_price_label');\n                    const nameEl  = document.getElementById(uid + '_name');\n                    const phoneEl = document.getElementById(uid + '_phone');\n                    const otpEl   = document.getElementById(uid + '_otp');\n\n                    const btnRole    = document.getElementById(uid + '_btn_role');\n                    const btnVehicle = document.getElementById(uid + '_btn_vehicle');\n                    const btnPrice   = document.getElementById(uid + '_btn_price');\n                    const btnPhone   = document.getElementById(uid + '_btn_phone');\n                    const btnResend  = document.getElementById(uid + '_btn_resend');\n                    const btnVerify  = document.getElementById(uid + '_btn_verify');\n\n                    const backToRole              = document.getElementById(uid + '_back_to_role');\n                    const backToVehicleFromPrice  = document.getElementById(uid + '_back_to_vehicle_from_price');\n                    const backToPrice             = document.getElementById(uid + '_back_to_price');\n                    const backToPhone             = document.getElementById(uid + '_back_to_phone');\n\n                    const loadingPrice = document.getElementById(uid + '_loading_price');\n                    const loadingOtp   = document.getElementById(uid + '_loading_otp');\n\n                    const confirmPriceEl = document.getElementById(uid + '_confirm_price');\n                    const otpPhoneEl     = document.getElementById(uid + '_otp_phone_num');\n\n                    const okBox   = document.getElementById(uid + '_ok');\n                    const errBox  = document.getElementById(uid + '_err');\n                    const finalBox = document.getElementById(uid + '_final');\n\n                    \/\/ Result fields\n                    const resVehicle    = document.getElementById(uid + '_res_vehicle');\n                    const resPrice      = document.getElementById(uid + '_res_price');\n                    const resUsajiliRow = document.getElementById(uid + '_res_usajili_row');\n                    const resUsajili    = document.getElementById(uid + '_res_usajili');\n                    const resRegionRow  = document.getElementById(uid + '_res_region_row');\n                    const resRegion     = document.getElementById(uid + '_res_region');\n                    const resStamp      = document.getElementById(uid + '_res_stamp');\n                    const resTransfer   = document.getElementById(uid + '_res_transfer');\n                    const resCard       = document.getElementById(uid + '_res_card');\n                    const resTotal      = document.getElementById(uid + '_res_total');\n                    const resNote       = document.getElementById(uid + '_res_note');\n\n                    const roleOpts = Array.prototype.slice.call(document.querySelectorAll('#' + uid + ' .gp-type-opt[data-role]'));\n\n                    let storedOwnerRole = '';\n                    let storedPriceDigits = '';\n                    let storedPricePretty = '';\n\n                    let tsMake = null, tsModel = null, tsYear = null, tsRegion = null, tsUsajili = null;\n                    let cachedNonce = '';\n                    let makesLoaded = false;\n                    let lookupsLoaded = false;\n                    let resendTimer = null;\n\n                    function lockBody(lock){ try{ document.body.style.overflow = lock ? 'hidden' : ''; }catch(e){} }\n\n                    async function getNonce(force){\n                        if(cachedNonce && !force) return cachedNonce;\n                        const fd = new FormData();\n                        fd.append('action', 'gp_vfees_get_nonce');\n                        try{\n                            const res = await fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body:fd });\n                            const data = await res.json();\n                            if(data && data.success && data.data && data.data.nonce){\n                                cachedNonce = String(data.data.nonce);\n                                return cachedNonce;\n                            }\n                        }catch(e){}\n                        return '';\n                    }\n\n                    async function apiPost(action, extra){\n                        const nonce = await getNonce(false);\n                        const fd = new FormData();\n                        fd.append('action', action);\n                        fd.append('nonce', nonce);\n                        if(extra){ Object.keys(extra).forEach(function(k){ fd.append(k, extra[k]); }); }\n                        const res = await fetch(ajaxUrl, { method:'POST', credentials:'same-origin', body:fd });\n                        return res.json();\n                    }\n\n                    function fillSelect(ts, items){\n                        ts.clearOptions();\n                        ts.clear(true);\n                        (items || []).forEach(function(it){\n                            ts.addOption({ value: String(it.id), text: it.name });\n                        });\n                        ts.refreshOptions(false);\n                    }\n\n                    function buildYears(ts){\n                        const now = new Date().getFullYear();\n                        const start = 1980;\n                        const opts = [];\n                        for(let y = now; y >= start; y--){ opts.push({ value:String(y), text:String(y) }); }\n                        ts.clearOptions();\n                        opts.forEach(function(o){ ts.addOption(o); });\n                        ts.refreshOptions(false);\n                    }\n\n                    function initTomSelects(){\n                        if(typeof TomSelect === 'undefined') return;\n                        const common = { create:false, maxOptions:1000, maxItems:1, hideSelected:true, closeAfterSelect:true, allowEmptyOption:false, plugins:[] };\n\n                        tsMake    = new TomSelect('#' + uid + '_make',    Object.assign({}, common, { placeholder:'Chagua make\u2026' }));\n                        tsModel   = new TomSelect('#' + uid + '_model',   Object.assign({}, common, { placeholder:'Chagua make kwanza\u2026' }));\n                        tsYear    = new TomSelect('#' + uid + '_year',    Object.assign({}, common, { placeholder:'Chagua mwaka\u2026' }));\n                        tsRegion  = new TomSelect('#' + uid + '_region',  Object.assign({}, common, { placeholder:'Chagua mkoa\u2026' }));\n                        tsUsajili = new TomSelect('#' + uid + '_usajili', Object.assign({}, common, { placeholder:'Chagua usajili\u2026' }));\n\n                        buildYears(tsYear);\n\n                        tsModel.disable();\n\n                        tsMake.on('change', async function(makeId){\n                            tsModel.clear(true);\n                            tsModel.clearOptions();\n                            tsModel.disable();\n                            if(!makeId){ return; }\n                            tsModel.settings.placeholder = 'Inapakia\u2026';\n                            tsModel.load && tsModel.load('');\n                            try{\n                                const data = await apiPost('gp_vfees_models', { make_id: makeId });\n                                if(data && data.success){\n                                    fillSelect(tsModel, data.data.items);\n                                    tsModel.enable();\n                                }\n                            }catch(e){}\n                        });\n                    }\n\n                    async function loadMakes(){\n                        if(makesLoaded || !tsMake) return;\n                        try{\n                            const data = await apiPost('gp_vfees_makes', {});\n                            if(data && data.success){\n                                fillSelect(tsMake, data.data.items);\n                                makesLoaded = true;\n                            }\n                        }catch(e){}\n                    }\n\n                    async function loadLookups(){\n                        if(lookupsLoaded) return;\n                        try{\n                            const [reg, usa] = await Promise.all([\n                                apiPost('gp_vfees_regions', {}),\n                                apiPost('gp_vfees_usajili', {})\n                            ]);\n                            if(reg && reg.success) fillSelect(tsRegion, reg.data.items);\n                            if(usa && usa.success) fillSelect(tsUsajili, usa.data.items);\n                            lookupsLoaded = true;\n                        }catch(e){}\n                    }\n\n                    function showOnly(step){\n                        [stepRole, stepVehicle, stepPrice, stepPhone, stepOtp].forEach(function(s){ s.classList.add('gp-hidden'); });\n                        step.classList.remove('gp-hidden');\n                    }\n                    function showErr(msg){ errBox.textContent = msg; errBox.style.display='block'; okBox.style.display='none'; }\n                    function showOk(msg){ okBox.textContent = msg; okBox.style.display='block'; errBox.style.display='none'; }\n                    function clearMsgs(){ errBox.style.display='none'; okBox.style.display='none'; errBox.textContent=''; okBox.textContent=''; }\n                    function setLoading(el, on){ el.style.display = on ? 'inline' : 'none'; }\n\n                    function formatWithCommas(d){ if(!d) return ''; d = d.replace(\/^0+\/, '') || '0'; return d.replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, ','); }\n                    function digitsOnly(v){ return (v||'').toString().replace(\/[^\\d]\/g, ''); }\n                    function setPriceFormatted(){ priceEl.value = formatWithCommas(digitsOnly(priceEl.value)); }\n\n                    function startResendCooldown(seconds){\n                        let s = seconds || 60;\n                        btnResend.disabled = true;\n                        const base = \"Tuma OTP Tena\";\n                        btnResend.textContent = base + ' (' + s + ')';\n                        clearInterval(resendTimer);\n                        resendTimer = setInterval(function(){\n                            s--;\n                            if(s <= 0){\n                                clearInterval(resendTimer);\n                                btnResend.disabled = false;\n                                btnResend.textContent = base;\n                            } else {\n                                btnResend.textContent = base + ' (' + s + ')';\n                            }\n                        }, 1000);\n                    }\n\n                    function renderResult(b, note){\n                        if(!b) return;\n                        if(resVehicle) resVehicle.textContent = b.vehicle_line || '';\n                        if(resPrice)    resPrice.textContent    = b.price || '\u2014';\n                        if(resStamp)    resStamp.textContent    = b.stamp_duty || '\u2014';\n                        if(resTransfer) resTransfer.textContent = b.transfer_fee || '\u2014';\n                        if(resCard)     resCard.textContent     = b.card_dup_fee || '\u2014';\n                        if(resTotal)    resTotal.textContent    = b.total || '\u2014';\n\n                        if(b.usajili){\n                            if(resUsajili) resUsajili.textContent = b.usajili;\n                            if(resUsajiliRow) resUsajiliRow.style.display = '';\n                        } else if(resUsajiliRow){ resUsajiliRow.style.display = 'none'; }\n\n                        if(b.region){\n                            if(resRegion) resRegion.textContent = b.region;\n                            if(resRegionRow) resRegionRow.style.display = '';\n                        } else if(resRegionRow){ resRegionRow.style.display = 'none'; }\n\n                        if(resNote) resNote.textContent = note || resultSmsNote;\n                    }\n\n                    function resetAll(){\n                        storedOwnerRole='';\n                        storedPriceDigits=''; storedPricePretty='';\n\n                        if(priceEl) priceEl.value='';\n                        if(nameEl) nameEl.value='';\n                        if(phoneEl && !skipOtp) phoneEl.value='';\n                        if(otpEl) otpEl.value='';\n\n                        clearMsgs();\n                        if(finalBox){ finalBox.style.display='none'; }\n\n                        if(btnPrice) btnPrice.disabled=false;\n                        if(btnVerify) btnVerify.disabled=false;\n                        if(btnResend){ btnResend.disabled=false; btnResend.textContent=\"Tuma OTP Tena\"; }\n                        clearInterval(resendTimer);\n                        setLoading(loadingPrice, false);\n                        setLoading(loadingOtp, false);\n\n                        roleOpts.forEach(function(x){ x.classList.remove('is-active'); });\n\n                        if(tsMake){ tsMake.clear(true); }\n                        if(tsModel){ tsModel.clear(true); tsModel.clearOptions(); tsModel.disable(); }\n                        if(tsYear){ tsYear.clear(true); }\n                        if(tsRegion){ tsRegion.clear(true); }\n                        if(tsUsajili){ tsUsajili.clear(true); }\n\n                        if(confirmPriceEl) confirmPriceEl.textContent='\u2014';\n                        if(otpPhoneEl) otpPhoneEl.textContent='\u2014';\n\n                        if(wrapForm) wrapForm.classList.remove('gp-hidden');\n                        showOnly(stepRole);\n                    }\n\n                    function openModal(){\n                        modal.classList.add('is-open');\n                        modal.setAttribute('aria-hidden','false');\n                        lockBody(true);\n                        if(!tsMake) initTomSelects();\n                        loadMakes();\n                        loadLookups();\n                    }\n                    function closeModal(){\n                        modal.classList.remove('is-open');\n                        modal.setAttribute('aria-hidden','true');\n                        lockBody(false);\n                        resetAll();\n                    }\n\n                    openBtn.addEventListener('click', openModal);\n                    closeBtn.addEventListener('click', closeModal);\n                    \/\/ Modal closes only via the X (close) button \u2014 no overlay-click or Escape close.\n\n                    roleOpts.forEach(function(el){\n                        el.addEventListener('click', function(){\n                            clearMsgs();\n                            roleOpts.forEach(function(x){ x.classList.remove('is-active'); });\n                            el.classList.add('is-active');\n                            storedOwnerRole = el.getAttribute('data-role') || '';\n                        });\n                    });\n\n                    priceEl.addEventListener('input', setPriceFormatted);\n\n                    \/\/ Step 1 (role) -> Step 2 (vehicle details)\n                    btnRole.addEventListener('click', function(){\n                        clearMsgs();\n                        if(!storedOwnerRole){ showErr('Tafadhali chagua kama wewe ni Mmiliki Wa Zamani (Seller) au Mmiliki Mpya (Buyer).'); return; }\n                        showOnly(stepVehicle);\n                    });\n                    backToRole.addEventListener('click', function(){ clearMsgs(); showOnly(stepRole); });\n\n                    \/\/ Step 2 (vehicle details) -> Step 3 (price)\n                    btnVehicle.addEventListener('click', function(){\n                        clearMsgs();\n                        if(!tsMake || !tsMake.getValue()){ showErr('Tafadhali chagua make ya gari.'); return; }\n                        if(!tsModel || !tsModel.getValue()){ showErr('Tafadhali chagua model ya gari.'); return; }\n                        if(!tsYear || !tsYear.getValue()){ showErr('Tafadhali chagua mwaka (year) wa gari.'); return; }\n                        if(!tsUsajili || !tsUsajili.getValue()){ showErr('Tafadhali chagua usajili.'); return; }\n                        showOnly(stepPrice);\n                        priceEl.focus();\n                    });\n                    backToVehicleFromPrice.addEventListener('click', function(){ clearMsgs(); showOnly(stepVehicle); });\n\n                    \/\/ Step 3 (price) -> Step 4 (name + phone)\n                    btnPrice.addEventListener('click', function(){\n                        clearMsgs();\n                        const d = digitsOnly(priceEl.value);\n                        if(!d || parseInt(d,10) <= 0){ showErr('Tafadhali weka bei sahihi.'); return; }\n                        storedPriceDigits = d;\n                        storedPricePretty = 'TSh ' + formatWithCommas(d);\n                        setLoading(loadingPrice, true);\n                        btnPrice.disabled = true;\n                        setTimeout(function(){\n                            setLoading(loadingPrice, false);\n                            btnPrice.disabled = false;\n                            confirmPriceEl.textContent = storedPricePretty;\n                            showOnly(stepPhone);\n                            if(nameEl) nameEl.focus();\n                        }, 500);\n                    });\n                    backToPrice.addEventListener('click', function(){\n                        clearMsgs(); showOnly(stepPrice); priceEl.focus();\n                        const val = priceEl.value || ''; priceEl.setSelectionRange(val.length, val.length);\n                    });\n\n                    \/\/ Step 5 -> 6 (request OTP)\n                    async function requestOtp(){\n                        const phone = (phoneEl.value || '').trim();\n                        setLoading(loadingOtp, true);\n                        const data = await apiPost('gp_vfees_send_otp', { phone: phone });\n                        setLoading(loadingOtp, false);\n                        if(data && data.success){\n                            showOk(\"Tumekutumia OTP kwa SMS.\");\n                            startResendCooldown((data.data && data.data.cooldown) ? data.data.cooldown : 60);\n                            return true;\n                        }\n                        const msg = (data && data.data && data.data.message) ? data.data.message : 'Imeshindikana kutuma OTP. Jaribu tena.';\n                        showErr(msg);\n                        return false;\n                    }\n\n                    btnPhone.addEventListener('click', async function(){\n                        clearMsgs();\n                        const nameRaw = (nameEl.value || '').trim();\n                        if(!nameRaw){ showErr('Tafadhali weka jina lako.'); return; }\n                        const phoneRaw = (phoneEl.value || '').trim();\n                        if(!phoneRaw){ showErr('Tafadhali weka namba ya simu.'); return; }\n\n                        if(skipOtp){\n                            \/\/ Logged-in user with on-file number: submit directly, no OTP step.\n                            btnPhone.disabled = true;\n                            setLoading(loadingPrice, false);\n                            await submitLead(btnPhone);\n                            btnPhone.disabled = false;\n                            return;\n                        }\n\n                        otpPhoneEl.textContent = phoneRaw;\n                        btnPhone.disabled = true;\n                        const ok = await requestOtp();\n                        btnPhone.disabled = false;\n                        if(ok){\n                            showOnly(stepOtp);\n                            if(otpEl) otpEl.focus();\n                        }\n                    });\n                    backToPhone.addEventListener('click', function(){\n                        clearMsgs(); showOnly(stepPhone); phoneEl.focus();\n                        const v = phoneEl.value || ''; phoneEl.setSelectionRange(v.length, v.length);\n                    });\n\n                    \/\/ Resend OTP\n                    btnResend.addEventListener('click', async function(){\n                        clearMsgs();\n                        await requestOtp();\n                    });\n\n                    \/\/ Shared submit: POST the lead, render the result screen. Used by both\n                    \/\/ the OTP path (verifyAndSubmit) and the skip-OTP path (logged-in users).\n                    async function submitLead(triggerBtn){\n                        setLoading(loadingOtp, true);\n\n                        const payload = {\n                            owner_role:    storedOwnerRole,\n                            vehicle_price: storedPriceDigits,\n                            name:          (nameEl.value || '').trim(),\n                            phone:         (phoneEl.value || '').trim(),\n                            otp:           (otpEl.value || '').trim(),\n                            make_id:       tsMake ? (tsMake.getValue() || '') : '',\n                            model_id:      tsModel ? (tsModel.getValue() || '') : '',\n                            year:          tsYear ? (tsYear.getValue() || '') : '',\n                            region_id:     tsRegion ? (tsRegion.getValue() || '') : '',\n                            usajili_id:    tsUsajili ? (tsUsajili.getValue() || '') : ''\n                        };\n\n                        try{\n                            const data = await apiPost('gp_vfees_submit', payload);\n                            const payloadData = (data && data.data) ? data.data : null;\n\n                            if(data && data.success){\n                                (function(){\n                                    try{\n                                        const k = 'gp_vfees_conv_fired_v1';\n                                        if(window.sessionStorage && window.sessionStorage.getItem(k) === '1') return;\n                                        const eventName = 'Usajili_lead_submitted_car';\n                                        const value = 1, currency = 'USD';\n                                        if(typeof window.gtag === 'function') window.gtag('event', eventName, { value:value, currency:currency });\n                                        if(window.dataLayer && Array.isArray(window.dataLayer)) window.dataLayer.push({ event:eventName, value:value, currency:currency });\n                                        if(typeof window.fbq === 'function') window.fbq('trackCustom', eventName, { value:value, currency:currency });\n                                        if(window.sessionStorage) window.sessionStorage.setItem(k, '1');\n                                    }catch(e){}\n                                })();\n\n                                renderResult(payloadData && payloadData.breakdown ? payloadData.breakdown : null, resultSmsNote);\n                                wrapForm.classList.add('gp-hidden');\n                                finalBox.style.display = 'block';\n                                return true;\n                            } else if(payloadData && payloadData.sms_failed_with_result && payloadData.breakdown){\n                                \/\/ Lead saved + result computed, but SMS failed: still show result with the failure note.\n                                renderResult(payloadData.breakdown, payloadData.message || resultSmsNote);\n                                wrapForm.classList.add('gp-hidden');\n                                finalBox.style.display = 'block';\n                                return true;\n                            } else {\n                                const msg = (payloadData && payloadData.message) ? payloadData.message : 'Imeshindikana. Tafadhali jaribu tena.';\n                                showErr(msg);\n                                return false;\n                            }\n                        }catch(e){\n                            showErr('Kuna tatizo la mtandao. Tafadhali jaribu tena.');\n                            return false;\n                        }finally{\n                            setLoading(loadingOtp, false);\n                        }\n                    }\n\n                    \/\/ Step 6: verify OTP + submit (logged-out flow)\n                    async function verifyAndSubmit(){\n                        clearMsgs();\n                        const otp = (otpEl.value || '').trim();\n                        if(!otp || otp.length < 4){ showErr('Tafadhali weka OTP uliyopokea kwa SMS.'); return; }\n\n                        btnVerify.disabled = true;\n                        btnResend.disabled = true;\n                        try{\n                            await submitLead(btnVerify);\n                        }finally{\n                            btnVerify.disabled = false;\n                            btnResend.disabled = false;\n                        }\n                    }\n                    btnVerify.addEventListener('click', verifyAndSubmit);\n\n                    \/\/ Enter key helpers\n                    priceEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPrice.click(); } });\n                    if(nameEl){ nameEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPhone.click(); } }); }\n                    phoneEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnPhone.click(); } });\n                    otpEl.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ e.preventDefault(); btnVerify.click(); } });\n\n                    \/\/ Initial state\n                    resetAll();\n                })();\n            <\/script>\n        <\/div>\n        <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-546d832 elementor-hidden-mobile\" data-id=\"546d832\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>&#8211; Baada ya kununua gari, kazi haishii pale unapokabidhiwa funguo. Ni muhimu kubadili umiliki\u00a0TRA\u00a0kutoka kwa mmiliki wa zamani kuja kwako mmiliki mpya.\u00a0 \u00a0 \u00a0 Jinsi ya Kubadili Umiliki Wa Gari Online TRA. &#8211; Mwanzoni mwa mwaka 2025 TRA\u00a0walitambulisha mfumo mpya wa kubadili umiliki wa vyombo vya moto uitwao IDRAS. Mfumo huo hutunza taarifa za umiliki [&hellip;]<\/p>\n","protected":false},"author":81,"featured_media":29369,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3474],"tags":[],"class_list":["post-29352","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kuuza-gari-tanzania"],"_links":{"self":[{"href":"https:\/\/garipesa.com\/en\/wp-json\/wp\/v2\/posts\/29352","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/garipesa.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/garipesa.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/garipesa.com\/en\/wp-json\/wp\/v2\/users\/81"}],"replies":[{"embeddable":true,"href":"https:\/\/garipesa.com\/en\/wp-json\/wp\/v2\/comments?post=29352"}],"version-history":[{"count":84,"href":"https:\/\/garipesa.com\/en\/wp-json\/wp\/v2\/posts\/29352\/revisions"}],"predecessor-version":[{"id":74735,"href":"https:\/\/garipesa.com\/en\/wp-json\/wp\/v2\/posts\/29352\/revisions\/74735"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/garipesa.com\/en\/wp-json\/wp\/v2\/media\/29369"}],"wp:attachment":[{"href":"https:\/\/garipesa.com\/en\/wp-json\/wp\/v2\/media?parent=29352"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/garipesa.com\/en\/wp-json\/wp\/v2\/categories?post=29352"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/garipesa.com\/en\/wp-json\/wp\/v2\/tags?post=29352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}