{"id":138,"date":"2026-02-11T16:58:42","date_gmt":"2026-02-11T16:58:42","guid":{"rendered":"https:\/\/nafiz.ami.bd\/?page_id=138"},"modified":"2026-02-12T03:07:23","modified_gmt":"2026-02-12T03:07:23","slug":"home","status":"publish","type":"page","link":"https:\/\/nafiz.ami.bd\/index.php\/home\/","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"138\" class=\"elementor elementor-138\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c7732ae e-flex e-con-boxed e-con e-parent\" data-id=\"c7732ae\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e1183e6 elementor-widget elementor-widget-html\" data-id=\"e1183e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>Smart Soil Guard - User Dashboard<\/title>\r\n    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\r\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;600;700&display=swap\" rel=\"stylesheet\">\r\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.0.0\/css\/all.min.css\">\r\n    <link rel=\"stylesheet\" href=\"{{ url_for('static', filename='style.css') }}\">\r\n    <style>\r\n        body { font-family: 'Inter', sans-serif; background-color: #0f172a; color: #e2e8f0; margin: 0; padding: 0; height: 100vh; width: 100vw; overflow: hidden; }\r\n        .dashboard-container { display: grid; grid-template-rows: 60px 1fr; height: 100vh; width: 100vw; gap: 15px; padding: 15px; }\r\n        .header { background: rgba(30, 41, 59, 0.7); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 12px; display: flex; align-items: center; justify-content: space-between; padding: 0 25px; }\r\n        .main-grid { display: grid; grid-template-columns: 280px 1fr 320px; gap: 15px; height: 100%; overflow: hidden; }\r\n        .card { background: #1e293b; border: 1px solid rgba(255, 255, 255, 0.05); border-radius: 16px; padding: 15px; display: flex; flex-direction: column; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); height: 100%; overflow: hidden; }\r\n        \r\n        .sensor-card-modern { background: #151e2d; border: 1px solid rgba(255, 255, 255, 0.05); transition: transform 0.2s; position: relative; overflow: hidden; border-radius: 12px; padding: 12px; }\r\n        .sensor-card-modern:hover { transform: translateY(-2px); border-color: rgba(255, 255, 255, 0.1); }\r\n        .graph-glow { position: absolute; bottom: 0; left: 0; height: 100%; opacity: 0.15; transition: width 1.5s cubic-bezier(0.4, 0, 0.2, 1); mask-image: linear-gradient(to top, black, transparent); -webkit-mask-image: linear-gradient(to top, black, transparent); }\r\n\r\n        .rating-circle { \r\n            width: 150px; height: 150px; border-radius: 50%; display: flex; flex-direction: column; align-items: center; justify-content: center; margin: 0 auto; position: relative;\r\n            background: radial-gradient(closest-side, #1e293b 85%, transparent 86% 100%), conic-gradient(#334155 0%, transparent 0%); \r\n            transition: all 1s ease-out; box-shadow: 0 0 15px rgba(0,0,0,0.2); \r\n        }\r\n        \r\n        .ai-text { background: #0f172a; border-radius: 8px; padding: 15px; border-left: 3px solid #10b981; font-size: 0.95rem; line-height: 1.6; color: #cbd5e1; flex-grow: 1; overflow-y: auto; }\r\n        .advice-item { display: flex; align-items: start; gap: 10px; font-size: 0.9rem; margin-bottom: 8px; padding: 8px; background: rgba(255,255,255,0.03); border-radius: 6px; }\r\n        .crop-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 10px; }\r\n        .season-box { background: rgba(255,255,255,0.03); padding: 10px; border-radius: 8px; text-align: center; }\r\n        .pulse-green { animation: pulse 2s infinite; }\r\n        @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.4); } 70% { box-shadow: 0 0 0 10px rgba(16, 185, 129, 0); } 100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); } }\r\n        .hidden { display: none !important; }\r\n        .waiting-state { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; color: #64748b; text-align: center; }\r\n        .spin-slow { animation: spin 1.5s linear infinite; }\r\n        @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n\r\n    <div class=\"dashboard-container\">\r\n        <!-- HEADER -->\r\n        <header class=\"header\">\r\n            <div class=\"flex items-center space-x-3\">\r\n                <i class=\"fas fa-leaf text-green-500 text-xl\"><\/i>\r\n                <h1 class=\"text-xl font-bold\">\u09b8\u09cd\u09ae\u09be\u09b0\u09cd\u099f \u098f\u0997\u09cd\u09b0\u09cb <span class=\"text-green-500\">\u0997\u09be\u09b0\u09cd\u09a1<\/span><\/h1>\r\n            <\/div>\r\n            <div class=\"flex items-center space-x-4\">\r\n                <div class=\"px-3 py-1 bg-green-500\/10 border border-green-500\/30 rounded-full text-xs text-green-400 font-mono\"><span id=\"user-sys-status\">\u25cf \u0985\u09ab\u09b2\u09be\u0987\u09a8<\/span><\/div>\r\n                <div id=\"clock\" class=\"font-mono text-slate-400 text-sm\"><span id=\"user-clock\">00:00<\/span><\/div>\r\n            <\/div>\r\n        <\/header>\r\n\r\n        <!-- MAIN CONTENT -->\r\n        <main class=\"main-grid\">\r\n            <!-- COL 1: SENSORS (Live Readings) -->\r\n            <div class=\"card\">\r\n                <h2 class=\"text-sm font-bold text-slate-500 uppercase mb-4 flex items-center gap-2\"><i class=\"fas fa-bolt\"><\/i> \u09b2\u09be\u0987\u09ad \u09b0\u09bf\u09a1\u09bf\u0982<\/h2>\r\n                <div class=\"flex-grow flex flex-col gap-3 overflow-y-auto pr-1\">\r\n                    \r\n                    <!-- Moisture -->\r\n                    <div class=\"sensor-card-modern group\">\r\n                        <div id=\"glow-moisture\" class=\"graph-glow bg-blue-500\" style=\"width: {{ data.moisture }}%;\"><\/div>\r\n                        <div class=\"relative z-10 flex justify-between items-start\">\r\n                            <div>\r\n                                <div class=\"text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-1\">\u0986\u09b0\u09cd\u09a6\u09cd\u09b0\u09a4\u09be (Moisture)<\/div>\r\n                                <div class=\"flex items-baseline gap-1\">\r\n                                    <span id=\"val-moisture\" class=\"text-2xl font-bold text-white tracking-tight\"><span id=\"val-moisture\" class=\"agro-live-val\">--<\/span><\/span>\r\n                                    <span class=\"text-xs text-slate-500 font-mono\">%<\/span>\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div class=\"w-10 h-10 bg-blue-500\/10 rounded-lg flex items-center justify-center border border-blue-500\/20 shadow-[0_0_10px_rgba(59,130,246,0.1)]\">\r\n                                <i class=\"fas fa-water text-blue-500 text-lg\"><\/i>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <!-- Air Temp -->\r\n                    <div class=\"sensor-card-modern group\">\r\n                        <div id=\"glow-temp\" class=\"graph-glow bg-orange-500\" style=\"width: {{ (data.temperature \/ 50) * 100 }}%;\"><\/div>\r\n                        <div class=\"relative z-10 flex justify-between items-start\">\r\n                            <div>\r\n                                <div class=\"text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-1\">\u09ac\u09be\u09df\u09c1 \u09a4\u09be\u09aa\u09ae\u09be\u09a4\u09cd\u09b0\u09be (Air)<\/div>\r\n                                <div class=\"flex items-baseline gap-1\">\r\n                                    <span id=\"val-temp\" class=\"text-2xl font-bold text-white tracking-tight\"><span id=\"val-temperature\" class=\"agro-live-val\">--<\/span><\/span>\r\n                                    <span class=\"text-xs text-slate-500 font-mono\">\u00b0C<\/span>\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div class=\"w-10 h-10 bg-orange-500\/10 rounded-lg flex items-center justify-center border border-orange-500\/20 shadow-[0_0_10px_rgba(249,115,22,0.1)]\">\r\n                                <i class=\"fas fa-thermometer-half text-orange-500 text-lg\"><\/i>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <!-- Soil Temp -->\r\n                    <div class=\"sensor-card-modern group\">\r\n                        <div id=\"glow-soil-temp\" class=\"graph-glow bg-red-500\" style=\"width: 0%;\"><\/div>\r\n                        <div class=\"relative z-10 flex justify-between items-start\">\r\n                            <div>\r\n                                <div class=\"text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-1\">\u09ae\u09be\u099f\u09bf\u09b0 \u09a4\u09be\u09aa\u09ae\u09be\u09a4\u09cd\u09b0\u09be (Soil)<\/div>\r\n                                <div class=\"flex items-baseline gap-1\">\r\n                                    <span id=\"val-soil-temp\" class=\"text-2xl font-bold text-white tracking-tight\"><span id=\"val-soil_temp\" class=\"agro-live-val\">--<\/span><\/span>\r\n                                    <span class=\"text-xs text-slate-500 font-mono\">\u00b0C<\/span>\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div class=\"w-10 h-10 bg-red-500\/10 rounded-lg flex items-center justify-center border border-red-500\/20 shadow-[0_0_10px_rgba(239,68,68,0.1)]\">\r\n                                <i class=\"fas fa-temperature-low text-red-500 text-lg\"><\/i>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <!-- TDS -->\r\n                    <div class=\"sensor-card-modern group\">\r\n                        <div id=\"glow-tds\" class=\"graph-glow bg-purple-500\" style=\"width: {{ (data.tds \/ 1000) * 100 }}%;\"><\/div>\r\n                        <div class=\"relative z-10 flex justify-between items-start\">\r\n                            <div>\r\n                                <div class=\"text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-1\">\u09aa\u09c1\u09b7\u09cd\u099f\u09bf\u09ae\u09be\u09a8 (TDS)<\/div>\r\n                                <div class=\"flex items-baseline gap-1\">\r\n                                    <span id=\"val-tds\" class=\"text-2xl font-bold text-white tracking-tight\"><span id=\"val-tds\" class=\"agro-live-val\">--<\/span><\/span>\r\n                                    <span class=\"text-xs text-slate-500 font-mono\">ppm<\/span>\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div class=\"w-10 h-10 bg-purple-500\/10 rounded-lg flex items-center justify-center border border-purple-500\/20 shadow-[0_0_10px_rgba(168,85,247,0.1)]\">\r\n                                <i class=\"fas fa-flask text-purple-500 text-lg\"><\/i>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <!-- Humidity -->\r\n                    <div class=\"sensor-card-modern group\">\r\n                        <div id=\"glow-humidity\" class=\"graph-glow bg-green-500\" style=\"width: {{ data.humidity }}%;\"><\/div>\r\n                        <div class=\"relative z-10 flex justify-between items-start\">\r\n                            <div>\r\n                                <div class=\"text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-1\">\u09ac\u09be\u09a4\u09be\u09b8\u09c7\u09b0 \u0986\u09b0\u09cd\u09a6\u09cd\u09b0\u09a4\u09be<\/div>\r\n                                <div class=\"flex items-baseline gap-1\">\r\n                                    <span id=\"val-humidity\" class=\"text-2xl font-bold text-white tracking-tight\"><span id=\"val-humidity\" class=\"agro-live-val\">--<\/span><\/span>\r\n                                    <span class=\"text-xs text-slate-500 font-mono\">%<\/span>\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div class=\"w-10 h-10 bg-green-500\/10 rounded-lg flex items-center justify-center border border-green-500\/20 shadow-[0_0_10px_rgba(34,197,94,0.1)]\">\r\n                                <i class=\"fas fa-wind text-green-500 text-lg\"><\/i>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <!-- Light -->\r\n                    <div class=\"sensor-card-modern group\">\r\n                        <div id=\"glow-light\" class=\"graph-glow bg-yellow-500\" style=\"width: 0%;\"><\/div>\r\n                        <div class=\"relative z-10 flex justify-between items-start\">\r\n                            <div>\r\n                                <div class=\"text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-1\">\u0986\u09b2\u09cb\u09b0 \u09a4\u09c0\u09ac\u09cd\u09b0\u09a4\u09be (Light)<\/div>\r\n                                <div class=\"flex items-baseline gap-1\">\r\n                                    <span id=\"val-light\" class=\"text-2xl font-bold text-white tracking-tight\"><span id=\"val-light\" class=\"agro-live-val\">--<\/span><\/span>\r\n                                    <span class=\"text-xs text-slate-500 font-mono\">Lvl<\/span>\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div class=\"w-10 h-10 bg-yellow-500\/10 rounded-lg flex items-center justify-center border border-yellow-500\/20 shadow-[0_0_10px_rgba(234,179,8,0.1)]\">\r\n                                <i class=\"fas fa-sun text-yellow-500 text-lg\"><\/i>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n            <!-- COL 2: CENTER PANEL (AI) -->\r\n            <div class=\"card relative\">\r\n                <div class=\"absolute top-0 left-0 w-full h-1 bg-gradient-to-r from-transparent via-green-500 to-transparent opacity-50\"><\/div>\r\n\r\n                <!-- View 1: Waiting -->\r\n                <div id=\"view-waiting\" class=\"waiting-state\">\r\n                    <div class=\"p-4 bg-slate-800 rounded-full mb-4 shadow-lg shadow-green-500\/10\">\r\n                        <i class=\"fas fa-microscope text-5xl text-green-500\"><\/i>\r\n                    <\/div>\r\n                    <h3 class=\"text-xl font-bold text-slate-400\">\u09ac\u09bf\u09b6\u09cd\u09b2\u09c7\u09b7\u09a3\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u09aa\u09cd\u09b0\u09b8\u09cd\u09a4\u09c1\u09a4<\/h3>\r\n                    <p class=\"text-sm text-slate-600 mt-2\">\u09b0\u09bf\u09aa\u09cb\u09b0\u09cd\u099f \u09a6\u09c7\u0996\u09a4\u09c7 \u09a8\u09bf\u099a\u09c7\u09b0 \u09ac\u09be\u099f\u09a8\u09c7 \u0995\u09cd\u09b2\u09bf\u0995 \u0995\u09b0\u09c1\u09a8<\/p>\r\n                <\/div>\r\n\r\n                <!-- View 2: Loading -->\r\n                <div id=\"view-loading\" class=\"waiting-state hidden\">\r\n                    <div class=\"relative mb-6\">\r\n                        <div class=\"w-20 h-20 border-4 border-slate-700 rounded-full\"><\/div>\r\n                        <div class=\"w-20 h-20 border-4 border-t-green-500 border-r-transparent border-b-transparent border-l-transparent rounded-full absolute top-0 left-0 spin-slow\"><\/div>\r\n                        <i class=\"fas fa-leaf text-green-500 text-xl absolute top-1\/2 left-1\/2 transform -translate-x-1\/2 -translate-y-1\/2\"><\/i>\r\n                    <\/div>\r\n                    <h3 class=\"text-xl font-bold text-green-400 animate-pulse\">\u09a1\u09c7\u099f\u09be \u09ac\u09bf\u09b6\u09cd\u09b2\u09c7\u09b7\u09a3 \u0995\u09b0\u09be \u09b9\u099a\u09cd\u099b\u09c7...<\/h3>\r\n                <\/div>\r\n\r\n                <!-- View 3: Result -->\r\n                <div id=\"view-result\" class=\"flex flex-col h-full hidden\">\r\n                    <div class=\"text-center mb-4\">\r\n                        <h2 class=\"text-sm font-bold text-slate-500 uppercase mb-4\">\u09ae\u09be\u099f\u09bf\u09b0 \u09b0\u09c7\u099f\u09bf\u0982 (Soil Rating)<\/h2>\r\n                        <!-- Dynamic Circle -->\r\n                        <div id=\"rating-circle\" class=\"rating-circle\">\r\n                            <span id=\"soil-rating\" class=\"text-4xl font-bold text-white tracking-tighter\"><span id=\"soil-rating\">--<\/span><\/span>\r\n                            <span id=\"soil-condition\" class=\"text-[10px] font-bold uppercase tracking-widest mt-1 text-center px-2\"><span id=\"soil-condition\">--<\/span><\/span>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class=\"flex-grow flex flex-col overflow-hidden\">\r\n                        <h2 class=\"text-sm font-bold text-slate-500 uppercase mb-2\"><i class=\"fas fa-robot text-green-500\"><\/i> Gemini AI \u09ac\u09bf\u09b6\u09cd\u09b2\u09c7\u09b7\u09a3<\/h2>\r\n                        <div id=\"ai-output-text\" class=\"ai-text custom-scroll\"><div id=\"ai-output-text\">\u0985\u09aa\u09c7\u0995\u09cd\u09b7\u09ae\u09be\u09a8...<\/div><\/div>\r\n                    <\/div>\r\n                    <div class=\"mt-4 pt-4 border-t border-slate-700 grid grid-cols-2 gap-4\">\r\n                        <div class=\"season-box border border-orange-500\/20\">\r\n                            <div class=\"text-xs text-orange-400 font-bold mb-1\">\u0997\u09cd\u09b0\u09c0\u09b7\u09cd\u09ae\u0995\u09be\u09b2\u09c0\u09a8 (Summer)<\/div>\r\n                            <div id=\"crop-summer\" class=\"text-sm\"><span id=\"crop-summer\">--<\/span><\/div>\r\n                        <\/div>\r\n                        <div class=\"season-box border border-blue-500\/20\">\r\n                            <div class=\"text-xs text-blue-400 font-bold mb-1\">\u09b6\u09c0\u09a4\u0995\u09be\u09b2\u09c0\u09a8 (Winter)<\/div>\r\n                            <div id=\"crop-winter\" class=\"text-sm\"><span id=\"crop-winter\">--<\/span><\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n          <!-- COL 2: AI PANEL-\u098f\u09b0 \u09a8\u09bf\u099a\u09c7 \u098f\u0987\u09ad\u09be\u09ac\u09c7 \u09a6\u09bf\u09ac\u09bf -->\r\n<div class=\"mt-auto pt-4\">\r\n    <button id=\"btn-analyze\" onclick=\"runMasterAI()\" class=\"w-full bg-green-600 hover:bg-green-700 text-white font-bold py-3 rounded-xl transition-all shadow-lg flex items-center justify-center gap-2 transform hover:scale-[1.02]\"><i class=\"fas fa-play\"><\/i> \u09ac\u09bf\u09b6\u09cd\u09b2\u09c7\u09b7\u09a3 \u09b6\u09c1\u09b0\u09c1 \u0995\u09b0\u09c1\u09a8<\/button>\r\n<\/div>\r\n            <\/div>\r\n\r\n            <!-- COL 3: ADVICE -->\r\n            <div class=\"card\">\r\n                <div id=\"advice-waiting\" class=\"waiting-state\">\r\n                    <i class=\"fas fa-clipboard-list text-5xl text-slate-700 mb-4\"><\/i>\r\n                    <h3 class=\"text-lg font-bold text-slate-500\">\u0985\u09aa\u09c7\u0995\u09cd\u09b7\u09ae\u09be\u09a8...<\/h3>\r\n                <\/div>\r\n\r\n                <div id=\"advice-result\" class=\"flex flex-col h-full hidden\">\r\n                    <!-- Improvements -->\r\n                    <div class=\"flex-1 mb-4 overflow-hidden flex flex-col\">\r\n                        <h2 class=\"text-sm font-bold text-green-400 uppercase mb-3\"><i class=\"fas fa-check-circle\"><\/i> \u09aa\u09b0\u09be\u09ae\u09b0\u09cd\u09b6 (\u0995\u09b0\u09a3\u09c0\u09af\u09bc)<\/h2>\r\n                        <div id=\"list-improvements\" class=\"overflow-y-auto pr-1\"><div id=\"list-improvements\"><\/div><\/div>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"h-px bg-slate-700 my-2\"><\/div>\r\n                    \r\n                    <!-- Warnings -->\r\n                    <div class=\"flex-1 overflow-hidden flex flex-col\">\r\n                        <h2 class=\"text-sm font-bold text-red-400 uppercase mb-3\"><i class=\"fas fa-exclamation-triangle\"><\/i> \u09b8\u09a4\u09b0\u09cd\u0995\u09a4\u09be (\u09ac\u09b0\u09cd\u099c\u09a8\u09c0\u09af\u09bc)<\/h2>\r\n                        <div id=\"list-warnings\" class=\"overflow-y-auto pr-1\"><div id=\"list-warnings\"><\/div>\r\n                            <!-- Empty state will be injected here by JS -->\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/main>\r\n    <\/div>\r\n\r\n    <script>\r\n        setInterval(() => document.getElementById('clock').textContent = new Date().toLocaleTimeString('en-US', {hour12:false}), 1000);\r\n\r\n        function animateValue(id, start, end, duration, isFloat) {\r\n            let startTimestamp = null;\r\n            const step = (timestamp) => {\r\n                if (!startTimestamp) startTimestamp = timestamp;\r\n                const progress = Math.min((timestamp - startTimestamp) \/ duration, 1);\r\n                const current = start + (end - start) * progress;\r\n                const el = document.getElementById(id);\r\n                if(el) el.innerText = isFloat ? current.toFixed(1) : Math.floor(current);\r\n                if (progress < 1) window.requestAnimationFrame(step);\r\n            };\r\n            window.requestAnimationFrame(step);\r\n        }\r\n\r\n        async function updateSensors() {\r\n            try {\r\n                const response = await fetch('\/api\/sensors');\r\n                const data = await response.json();\r\n                \r\n                const elMoisture = document.getElementById('val-moisture');\r\n                const elTemp = document.getElementById('val-temp');\r\n                const elSoilTemp = document.getElementById('val-soil-temp'); \r\n                const elTds = document.getElementById('val-tds');\r\n                const elHumidity = document.getElementById('val-humidity');\r\n                const elLight = document.getElementById('val-light');\r\n\r\n                animateValue('val-moisture', parseFloat(elMoisture.innerText) || 0, data.moisture, 2000, true);\r\n                animateValue('val-temp', parseFloat(elTemp.innerText) || 0, data.temperature, 2000, true);\r\n                animateValue('val-soil-temp', parseFloat(elSoilTemp?.innerText) || 0, data.soil_temp || 0, 2000, true);\r\n                animateValue('val-tds', parseInt(elTds.innerText) || 0, data.tds, 2000, false);\r\n                animateValue('val-humidity', parseFloat(elHumidity.innerText) || 0, data.humidity, 2000, true);\r\n                animateValue('val-light', parseInt(elLight?.innerText) || 0, data.light || 0, 2000, false);\r\n                \r\n                document.getElementById('glow-moisture').style.width = data.moisture + '%';\r\n                document.getElementById('glow-temp').style.width = (data.temperature \/ 50 * 100) + '%';\r\n                if(document.getElementById('glow-soil-temp')) \r\n                    document.getElementById('glow-soil-temp').style.width = (data.soil_temp \/ 50 * 100) + '%';\r\n                document.getElementById('glow-tds').style.width = (data.tds \/ 1000 * 100) + '%';\r\n                document.getElementById('glow-humidity').style.width = data.humidity + '%';\r\n                if(document.getElementById('glow-light')) \r\n                    document.getElementById('glow-light').style.width = (data.light \/ 1024 * 100) + '%';\r\n\r\n                if(data.timestamp.includes(' ')) document.getElementById('val-time').innerText = data.timestamp.split(' ')[1];\r\n            } catch (err) {}\r\n        }\r\n        setInterval(updateSensors, 3000);\r\n\r\n        async function runAnalysis() {\r\n            document.getElementById('view-waiting').classList.add('hidden');\r\n            document.getElementById('advice-waiting').classList.add('hidden');\r\n            document.getElementById('view-result').classList.add('hidden');\r\n            document.getElementById('advice-result').classList.add('hidden');\r\n            document.getElementById('view-loading').classList.remove('hidden');\r\n            \r\n            const btn = document.getElementById('btn-analyze');\r\n            btn.disabled = true;\r\n            btn.innerHTML = '<i class=\"fas fa-circle-notch fa-spin\"><\/i> \u09aa\u09cd\u09b0\u09b8\u09c7\u09b8\u09bf\u0982 \u09b9\u099a\u09cd\u099b\u09c7...';\r\n\r\n            try {\r\n                const response = await fetch('\/api\/analyze');\r\n                const data = await response.json();\r\n\r\n                const rating = parseFloat(data.rating) || 0;\r\n                document.getElementById('soil-rating').innerText = rating;\r\n                document.getElementById('soil-condition').innerText = data.condition;\r\n\r\n                \/\/ Circle Color Logic (FIXED - NO OUTER RING - JUST VALUE)\r\n                const circle = document.getElementById('rating-circle');\r\n                const conditionText = document.getElementById('soil-condition');\r\n                let color = '#ef4444'; \/\/ Red\r\n                if (rating >= 7) color = '#22c55e'; \/\/ Green\r\n                else if (rating >= 4) color = '#f59e0b'; \/\/ Orange\r\n\r\n                document.getElementById('soil-rating').style.color = color;\r\n                conditionText.style.color = color;\r\n                \r\n                \/\/ Shadow\r\n                circle.style.boxShadow = `0 0 25px ${color}50`;\r\n                \r\n                \/\/ Gradient (Background is transparent)\r\n                const percentage = rating * 10;\r\n                circle.style.background = `radial-gradient(closest-side, #1e293b 75%, transparent 76% 100%), \r\n                                           conic-gradient(${color} ${percentage}%, transparent 0%)`;\r\n\r\n                document.getElementById('ai-output-text').innerHTML = `<p>${data.analysis_bn}<\/p>`;\r\n                document.getElementById('crop-summer').innerText = data.crops_summer.join(\", \");\r\n                document.getElementById('crop-winter').innerText = data.crops_winter.join(\", \");\r\n\r\n                const impList = document.getElementById('list-improvements');\r\n                impList.innerHTML = \"\";\r\n                data.improvements.forEach(item => impList.innerHTML += `<div class=\"advice-item border-l-2 border-green-500\"><i class=\"fas fa-check text-green-500 mt-1\"><\/i><span>${item}<\/span><\/div>`);\r\n\r\n                const warnList = document.getElementById('list-warnings');\r\n                warnList.innerHTML = \"\";\r\n                if (data.warnings.length === 0) {\r\n                    warnList.innerHTML = `\r\n                        <div class=\"text-center p-6 bg-green-500\/5 rounded-lg border border-green-500\/10 mt-2\">\r\n                            <i class=\"fas fa-shield-alt text-green-500 text-3xl mb-2\"><\/i>\r\n                            <p class=\"text-sm font-bold text-green-400\">\u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8\u09c7 \u0995\u09cb\u09a8\u09cb \u099d\u09c1\u0981\u0995\u09bf \u09a8\u09c7\u0987<\/p>\r\n                            <p class=\"text-xs text-slate-500\">\u09b8\u09ac \u09aa\u09cd\u09af\u09be\u09b0\u09be\u09ae\u09bf\u099f\u09be\u09b0 \u09b8\u09cd\u09ac\u09be\u09ad\u09be\u09ac\u09bf\u0995 \u0986\u099b\u09c7<\/p>\r\n                        <\/div>`;\r\n                } else {\r\n                    data.warnings.forEach(item => warnList.innerHTML += `<div class=\"advice-item border-l-2 border-red-500 bg-red-500\/5\"><i class=\"fas fa-times text-red-500 mt-1\"><\/i><span>${item}<\/span><\/div>`);\r\n                }\r\n\r\n                setTimeout(() => {\r\n                    document.getElementById('view-loading').classList.add('hidden');\r\n                    document.getElementById('view-result').classList.remove('hidden');\r\n                    document.getElementById('advice-result').classList.remove('hidden');\r\n                    btn.disabled = false;\r\n                    btn.innerHTML = '<i class=\"fas fa-sync-alt\"><\/i> \u0986\u09ac\u09be\u09b0 \u099a\u09c7\u0995 \u0995\u09b0\u09c1\u09a8';\r\n                }, 1000);\r\n\r\n            } catch (error) {\r\n                alert(\"AI Error! Check Console.\");\r\n                document.getElementById('view-loading').classList.add('hidden');\r\n                document.getElementById('view-waiting').classList.remove('hidden');\r\n                btn.disabled = false;\r\n                btn.innerHTML = '<i class=\"fas fa-play\"><\/i> \u09ac\u09bf\u09b6\u09cd\u09b2\u09c7\u09b7\u09a3 \u09b6\u09c1\u09b0\u09c1 \u0995\u09b0\u09c1\u09a8';\r\n            }\r\n        }\r\n    <\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Smart Soil Guard &#8211; User Dashboard \u09b8\u09cd\u09ae\u09be\u09b0\u09cd\u099f \u098f\u0997\u09cd\u09b0\u09cb \u0997\u09be\u09b0\u09cd\u09a1 \u09b2\u09be\u0987\u09ad \u09b0\u09bf\u09a1\u09bf\u0982 \u0986\u09b0\u09cd\u09a6\u09cd\u09b0\u09a4\u09be (Moisture) % \u09ac\u09be\u09df\u09c1 \u09a4\u09be\u09aa\u09ae\u09be\u09a4\u09cd\u09b0\u09be (Air) \u00b0C \u09ae\u09be\u099f\u09bf\u09b0 \u09a4\u09be\u09aa\u09ae\u09be\u09a4\u09cd\u09b0\u09be (Soil) \u00b0C \u09aa\u09c1\u09b7\u09cd\u099f\u09bf\u09ae\u09be\u09a8 (TDS) ppm \u09ac\u09be\u09a4\u09be\u09b8\u09c7\u09b0 \u0986\u09b0\u09cd\u09a6\u09cd\u09b0\u09a4\u09be % \u0986\u09b2\u09cb\u09b0 \u09a4\u09c0\u09ac\u09cd\u09b0\u09a4\u09be (Light) Lvl \u09ac\u09bf\u09b6\u09cd\u09b2\u09c7\u09b7\u09a3\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u09aa\u09cd\u09b0\u09b8\u09cd\u09a4\u09c1\u09a4 \u09b0\u09bf\u09aa\u09cb\u09b0\u09cd\u099f \u09a6\u09c7\u0996\u09a4\u09c7 \u09a8\u09bf\u099a\u09c7\u09b0 \u09ac\u09be\u099f\u09a8\u09c7 \u0995\u09cd\u09b2\u09bf\u0995 \u0995\u09b0\u09c1\u09a8 \u09a1\u09c7\u099f\u09be \u09ac\u09bf\u09b6\u09cd\u09b2\u09c7\u09b7\u09a3 \u0995\u09b0\u09be \u09b9\u099a\u09cd\u099b\u09c7&#8230; \u09ae\u09be\u099f\u09bf\u09b0 \u09b0\u09c7\u099f\u09bf\u0982 (Soil Rating) Gemini AI \u09ac\u09bf\u09b6\u09cd\u09b2\u09c7\u09b7\u09a3 \u0997\u09cd\u09b0\u09c0\u09b7\u09cd\u09ae\u0995\u09be\u09b2\u09c0\u09a8 (Summer) \u09b6\u09c0\u09a4\u0995\u09be\u09b2\u09c0\u09a8 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-138","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/nafiz.ami.bd\/index.php\/wp-json\/wp\/v2\/pages\/138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nafiz.ami.bd\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nafiz.ami.bd\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nafiz.ami.bd\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nafiz.ami.bd\/index.php\/wp-json\/wp\/v2\/comments?post=138"}],"version-history":[{"count":22,"href":"https:\/\/nafiz.ami.bd\/index.php\/wp-json\/wp\/v2\/pages\/138\/revisions"}],"predecessor-version":[{"id":163,"href":"https:\/\/nafiz.ami.bd\/index.php\/wp-json\/wp\/v2\/pages\/138\/revisions\/163"}],"wp:attachment":[{"href":"https:\/\/nafiz.ami.bd\/index.php\/wp-json\/wp\/v2\/media?parent=138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}