{"id":147,"date":"2026-01-30T21:01:42","date_gmt":"2026-01-30T21:01:42","guid":{"rendered":"https:\/\/www.ekincilercambalkon.tr\/?page_id=147"},"modified":"2026-01-31T21:20:09","modified_gmt":"2026-01-31T21:20:09","slug":"teklif-aliniz","status":"publish","type":"page","link":"https:\/\/www.ekincilercambalkon.tr\/index.php\/teklif-aliniz\/","title":{"rendered":"Teklif Al\u0131n\u0131z"},"content":{"rendered":"\n    <div id=\"ekinciler-v14-app\" class=\"font-sans antialiased text-slate-800 bg-slate-50 selection:bg-blue-200 selection:text-blue-900\" style=\"font-family: 'Inter', sans-serif;\">\r\n        \r\n        <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\r\n        <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&display=swap\" rel=\"stylesheet\">\r\n        \r\n        <style>\r\n            \/* \u00d6zel Stiller *\/\r\n            .v14-card { cursor: pointer; background: #fff; border: 2px solid #f1f5f9; transition: all 0.2s; position: relative; overflow: hidden; }\r\n            .v14-card:hover { transform: translateY(-3px); border-color: #cbd5e1; box-shadow: 0 10px 20px rgba(0,0,0,0.05); }\r\n            .v14-card.active { border-color: #2563eb; background-color: #eff6ff; box-shadow: 0 4px 12px rgba(37, 99, 235, 0.15); }\r\n            .v14-card.active .check-icon { opacity: 1; transform: scale(1); }\r\n            \r\n            .stage-3d { perspective: 1000px; overflow: hidden; }\r\n            .panel-3d { \r\n                transform-style: preserve-3d; transition: transform 0.6s ease;\r\n                background: linear-gradient(135deg, rgba(255,255,255,0.6), rgba(255,255,255,0.2));\r\n                border: 1px solid rgba(255,255,255,0.5); backdrop-filter: blur(4px);\r\n            }\r\n            \r\n            @keyframes shine { 0% { background-position: 200% center; } 100% { background-position: -200% center; } }\r\n            .campaign-bg {\r\n                background: linear-gradient(90deg, #dc2626 0%, #ef4444 25%, #fca5a5 50%, #ef4444 75%, #dc2626 100%);\r\n                background-size: 200% auto; animation: shine 6s linear infinite;\r\n            }\r\n            .v14-modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(15, 23, 42, 0.9); z-index: 99999; display: none; align-items: center; justify-content: center; }\r\n            .ek-input { width: 100%; padding: 8px; border: 1px solid #cbd5e1; border-radius: 6px; font-size: 14px; }\r\n        <\/style>\r\n\r\n        <div class=\"max-w-7xl mx-auto my-6 bg-white rounded-3xl shadow-xl overflow-hidden border border-slate-200\">\r\n            \r\n            <!-- BA\u015eLIK ALANI (Mavi arkaplan, kesin beyaz metinlerle g\u00fcncellendi) -->\r\n            <header class=\"bg-gradient-to-r from-blue-700 to-blue-500 text-white p-4 md:p-5 flex justify-between items-center relative z-20\">\r\n                <div class=\"flex items-center gap-3\">\r\n                    <div class=\"w-10 h-10 bg-white text-blue-600 rounded-xl flex items-center justify-center font-bold text-xl shadow-lg\">E<\/div>\r\n                    <div>\r\n                        <h1 class=\"font-bold text-base md:text-lg leading-tight text-white m-0 p-0\" style=\"color: #ffffff !important;\">EK\u0130NC\u0130LER CAM BALKON<\/h1>\r\n                        <p class=\"text-[10px] text-blue-100 font-medium tracking-widest uppercase m-0 p-0\" style=\"color: #dbeafe !important;\">Cam Balkon Sistemleri<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n                <button onclick=\"APP.admin.openLogin()\" class=\"bg-blue-800\/50 border border-blue-400\/30 hover:bg-blue-800\/70 px-3 py-1.5 rounded-full text-xs font-bold transition flex items-center gap-2 text-white\" style=\"color: #ffffff !important;\">\r\n                    \ud83d\udd12 Y\u00f6netici\r\n                <\/button>\r\n            <\/header>\r\n\r\n            <div id=\"campaign-strip\" class=\"hidden campaign-bg text-white py-2 px-4 text-center shadow-lg relative z-10\">\r\n                <div class=\"font-bold text-xs md:text-sm tracking-wide uppercase flex items-center justify-center gap-2 drop-shadow-md\">\r\n                    <span class=\"animate-pulse\">\ud83d\udce3<\/span> <span id=\"campaign-content\"><\/span>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"grid grid-cols-1 lg:grid-cols-12 relative z-0\">\r\n                \r\n                <div class=\"lg:col-span-7 p-5 md:p-8 space-y-6 bg-slate-50\/50\">\r\n                    \r\n                    <div>\r\n                        <h3 class=\"text-xs font-bold text-slate-500 uppercase mb-2 flex items-center gap-2\">\r\n                            <span class=\"w-5 h-5 rounded-full bg-blue-100 text-blue-600 flex items-center justify-center text-[10px] font-extrabold\">1<\/span> Sistem Modeli\r\n                        <\/h3>\r\n                        <div id=\"grid-sys\" class=\"grid grid-cols-1 sm:grid-cols-2 gap-3\"><\/div>\r\n                    <\/div>\r\n\r\n                    <div>\r\n                        <h3 class=\"text-xs font-bold text-slate-500 uppercase mb-2 flex items-center gap-2\">\r\n                            <span class=\"w-5 h-5 rounded-full bg-emerald-100 text-emerald-600 flex items-center justify-center text-[10px] font-extrabold\">2<\/span> Cam Rengi\r\n                        <\/h3>\r\n                        <div id=\"grid-glass\" class=\"grid grid-cols-3 sm:grid-cols-5 gap-3\"><\/div>\r\n                    <\/div>\r\n\r\n                    <div>\r\n                        <h3 class=\"text-xs font-bold text-slate-500 uppercase mb-2 flex items-center gap-2\">\r\n                            <span class=\"w-5 h-5 rounded-full bg-purple-100 text-purple-600 flex items-center justify-center text-[10px] font-extrabold\">3<\/span> Profil Rengi\r\n                        <\/h3>\r\n                        <div id=\"grid-prof\" class=\"grid grid-cols-2 sm:grid-cols-4 gap-3\"><\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"bg-white p-5 rounded-2xl border border-slate-200 shadow-sm\">\r\n                        <h3 class=\"text-xs font-bold text-slate-500 uppercase mb-4 flex items-center gap-2\">\r\n                            <span class=\"w-5 h-5 rounded-full bg-orange-100 text-orange-600 flex items-center justify-center text-[10px] font-extrabold\">4<\/span> \u00d6l\u00e7\u00fcler\r\n                        <\/h3>\r\n                        <div class=\"grid grid-cols-1 sm:grid-cols-3 gap-3\">\r\n                            <div><label class=\"text-[10px] font-bold text-slate-400\">EN (m)<\/label><input type=\"number\" id=\"inp-w\" class=\"ek-input\" placeholder=\"3.50\" step=\"0.01\"><\/div>\r\n                            <div><label class=\"text-[10px] font-bold text-slate-400\">BOY (m)<\/label><input type=\"number\" id=\"inp-h\" class=\"ek-input\" placeholder=\"2.20\" step=\"0.01\"><\/div>\r\n                            <div><label class=\"text-[10px] font-bold text-slate-400\">PANEL<\/label><select id=\"inp-p\" class=\"ek-input\"><\/select><\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <button onclick=\"APP.logic.calc()\" class=\"w-full bg-blue-600 hover:bg-blue-700 text-white font-bold py-4 rounded-xl shadow-lg transition\">HESAPLA VE G\u00d6R\u00dcNT\u00dcLE<\/button>\r\n                    <div id=\"loading-msg\" class=\"hidden text-center text-xs text-blue-500 mt-2\">Veriler y\u00fckleniyor...<\/div>\r\n                <\/div>\r\n\r\n                <div class=\"lg:col-span-5 bg-white border-l border-slate-100 p-5 md:p-8 flex flex-col gap-6\">\r\n                    \r\n                    <div id=\"res-card\" class=\"hidden relative rounded-2xl overflow-hidden bg-slate-900 text-white p-6 shadow-2xl\">\r\n                        <div class=\"absolute top-0 right-0 w-32 h-32 bg-blue-500 rounded-full blur-[50px] opacity-20\"><\/div>\r\n                        \r\n                        <h4 class=\"text-[10px] font-bold text-blue-300 uppercase tracking-widest mb-3 border-b border-slate-700 pb-2\">HESAPLANAN MAL\u0130YET<\/h4>\r\n                        \r\n                        <div id=\"price-on\" class=\"hidden\">\r\n                            <div class=\"flex items-end gap-2 mb-1\">\r\n                                <span id=\"out-price\" class=\"text-4xl font-black\">0<\/span>\r\n                                <span class=\"text-xl text-slate-400 mb-2\">\u20ba<\/span>\r\n                            <\/div>\r\n                            \r\n                            <div id=\"min-h-alert\" class=\"hidden bg-orange-500\/20 text-orange-200 p-2 rounded text-[10px] mb-2 border border-orange-500\/30\">\r\n                                \u26a0\ufe0f Y\u00fckseklik standard\u0131n alt\u0131nda. <b><span id=\"lbl-min\"><\/span>m<\/b> \u00fczerinden hesapland\u0131.\r\n                            <\/div>\r\n\r\n                            <div class=\"text-[10px] text-emerald-400 font-bold mb-3\">Nakit \/ Havale \u0130ndirimli<\/div>\r\n                            <div class=\"flex justify-between text-xs text-slate-400 bg-white\/5 p-2 rounded\">\r\n                                <span>Kredi Kart\u0131 (Taksitli):<\/span>\r\n                                <span class=\"font-bold text-white\"><span id=\"out-card\">0<\/span> \u20ba<\/span>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <div id=\"price-off\" class=\"hidden py-6 text-center border-2 border-dashed border-slate-700 rounded-xl bg-slate-800\/50\">\r\n                            <div class=\"text-lg font-bold\">\u00d6zel Fiyat Teklifi<\/div>\r\n                            <div class=\"text-[10px] text-slate-400\">Net tutar i\u00e7in WhatsApp butonuna bas\u0131n.<\/div>\r\n                        <\/div>\r\n\r\n                        <div class=\"mt-4 pt-3 border-t border-slate-700 text-[10px] space-y-1 text-slate-400\">\r\n                            <div class=\"flex justify-between\"><span>Sistem:<\/span> <span id=\"res-sys\" class=\"text-white font-bold\">-<\/span><\/div>\r\n                            <div class=\"flex justify-between\"><span>Cam:<\/span> <span id=\"res-glass\" class=\"text-white font-bold\">-<\/span><\/div>\r\n                            <div class=\"flex justify-between\"><span>Profil:<\/span> <span id=\"res-prof\" class=\"text-white font-bold\">-<\/span><\/div>\r\n                            <div class=\"flex justify-between\"><span>\u00d6l\u00e7\u00fc:<\/span> <span id=\"res-dims\" class=\"text-white font-bold\">-<\/span><\/div>\r\n                        <\/div>\r\n\r\n                        <button onclick=\"APP.logic.whatsapp()\" class=\"mt-4 w-full bg-emerald-500 hover:bg-emerald-600 text-white font-bold py-3 rounded-xl flex items-center justify-center gap-2 shadow-lg\">\r\n                            <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 24 24\"><path d=\"M.057 24l1.687-6.163c-1.041-1.804-1.588-3.849-1.587-5.946.003-6.556 5.338-11.891 11.893-11.891 3.181.001 6.167 1.24 8.413 3.488 2.245 2.248 3.481 5.236 3.48 8.414-.003 6.557-5.338 11.892-11.893 11.892-1.99-.001-3.951-.5-5.688-1.448l-6.305 1.654zm6.597-3.807c1.676.995 3.276 1.591 5.392 1.592 5.448 0 9.886-4.434 9.889-9.885.002-5.462-4.415-9.89-9.881-9.892-5.452 0-9.887 4.434-9.889 9.884-.001 2.225.651 3.891 1.746 5.634l-.999 3.648 3.742-.981zm11.387-5.464c-.074-.124-.272-.198-.57-.347-.297-.149-1.758-868-2.031-.967-.272-.099-.47-.149-.669.149-.198.297-.768.967-.941 1.165-.173.198-.347.223-.644.074-.297-.149-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.521.151-.172.2-.296.3-.495.099-.198.05-.372-.025-.521-.075-.148-.669-1.611-.916-2.206-.242-.579-.487-.501-.669-.51l-.57-.01c-.198 0-.52.074-.792.372s-1.04 1.016-1.04 2.479 1.065 2.876 1.213 3.074c.149.198 2.095 3.2 5.076 4.487.709.306 1.263.489 1.694.626.712.226 1.36.194 1.872.118.571-.085 1.758-.719 2.006-1.413.248-.695.248-1.29.173-1.414z\"\/><\/svg>\r\n                            Sipari\u015f Olu\u015ftur (WhatsApp)\r\n                        <\/button>\r\n                    <\/div>\r\n\r\n                    <!-- 3D \u00d6N\u0130ZLEME ALANI (items-stretch eklenerek panellerin g\u00f6r\u00fcnmesi sa\u011fland\u0131) -->\r\n                    <div class=\"flex-1 min-h-[300px] bg-slate-50 border border-slate-200 rounded-2xl p-4 flex flex-col relative shadow-inner\">\r\n                        <div class=\"flex justify-between items-center mb-4 z-10 relative\">\r\n                            <div class=\"font-bold text-slate-700 text-xs flex items-center gap-2\"><span class=\"bg-white p-1 rounded border\">\ud83e\uddca<\/span> 3D \u00d6nizleme<\/div>\r\n                            <div class=\"flex gap-1\"><button onclick=\"APP.anim.reset()\" class=\"bg-white px-2 py-1 text-[10px] border rounded\">\u00d6n<\/button><button onclick=\"APP.anim.left()\" class=\"bg-white px-2 py-1 text-[10px] border rounded\">Sol<\/button><button onclick=\"APP.anim.right()\" class=\"bg-white px-2 py-1 text-[10px] border rounded\">Sa\u011f<\/button><\/div>\r\n                        <\/div>\r\n                        <div class=\"flex-1 stage-3d bg-white rounded-xl border flex items-center justify-center relative\">\r\n                            <div class=\"absolute top-0 w-full h-3 bg-slate-300 z-10 border-b\"><\/div>\r\n                            <div class=\"absolute bottom-0 w-full h-3 bg-slate-300 z-10 border-t\"><\/div>\r\n                            <div id=\"stage-content\" class=\"absolute top-3 bottom-3 left-3 right-3 flex items-stretch justify-between px-4 py-1 z-0\">\r\n                                <span class=\"text-xs text-slate-400 m-auto text-center\">G\u00f6rmek i\u00e7in se\u00e7im yap\u0131p<br>Hesapla butonuna bas\u0131n.<\/span>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div id=\"modal-login\" class=\"v14-modal\">\r\n            <div class=\"bg-white p-6 rounded-2xl w-80 text-center shadow-2xl\">\r\n                <h3 class=\"font-bold text-lg mb-4\">Y\u00f6netici Giri\u015fi<\/h3>\r\n                <input type=\"password\" id=\"pass-input\" class=\"ek-input text-center mb-4\" placeholder=\"\u015eifre\">\r\n                <button onclick=\"APP.admin.login()\" class=\"w-full bg-slate-900 text-white py-2 rounded-lg font-bold\">Giri\u015f<\/button>\r\n                <button onclick=\"APP.ui.close('modal-login')\" class=\"mt-3 text-xs text-slate-500\">Kapat<\/button>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div id=\"modal-dash\" class=\"v14-modal\">\r\n            <div class=\"bg-white w-full max-w-2xl h-[90vh] rounded-2xl flex flex-col m-4 overflow-hidden shadow-2xl\">\r\n                <div class=\"bg-slate-900 text-white p-4 flex justify-between items-center shrink-0\">\r\n                    <h2 class=\"font-bold text-sm\">ONLINE Y\u00d6NET\u0130M PANEL\u0130<\/h2>\r\n                    <button onclick=\"APP.ui.close('modal-dash')\" class=\"bg-red-500 px-3 py-1 rounded text-xs\">Kapat<\/button>\r\n                <\/div>\r\n                <div class=\"p-6 overflow-y-auto space-y-6 bg-slate-50 flex-1\">\r\n                    \r\n                    <div class=\"bg-white p-4 rounded-xl border border-red-100 shadow-sm\">\r\n                        <h3 class=\"font-bold text-xs text-red-600 mb-2\">KAMPANYA AYARLARI<\/h3>\r\n                        <div class=\"flex items-center justify-between mb-2\">\r\n                            <label for=\"adm-camp-active\" class=\"text-xs font-bold cursor-pointer\">Kampanyay\u0131 Yay\u0131nla<\/label>\r\n                            <input type=\"checkbox\" id=\"adm-camp-active\" class=\"accent-red-600 w-5 h-5 cursor-pointer\" onchange=\"if(APP.db) APP.db.campaignActive = this.checked\">\r\n                        <\/div>\r\n                        <input type=\"text\" id=\"adm-camp-text\" class=\"ek-input\" placeholder=\"Kampanya Yaz\u0131s\u0131\" oninput=\"if(APP.db) APP.db.campaignText = this.value\">\r\n                    <\/div>\r\n\r\n                    <div class=\"bg-white p-4 rounded-xl border shadow-sm flex justify-between items-center cursor-pointer\" onclick=\"document.getElementById('adm-show-price').click()\">\r\n                        <label for=\"adm-show-price\" class=\"text-xs font-bold pointer-events-none\">Fiyatlar\u0131 Herkese G\u00f6ster<\/label>\r\n                        <input type=\"checkbox\" id=\"adm-show-price\" class=\"accent-blue-600 w-5 h-5 cursor-pointer\" onclick=\"event.stopPropagation()\" onchange=\"if(APP.db) APP.db.showPrices = this.checked\">\r\n                    <\/div>\r\n\r\n                    <div class=\"bg-white p-4 rounded-xl border shadow-sm\">\r\n                        <h3 class=\"font-bold text-xs text-blue-600 mb-2\">S\u0130STEMLER & M\u0130N. Y\u00dcKSEKL\u0130K<\/h3>\r\n                        <div class=\"flex gap-2 mb-2\">\r\n                            <input id=\"sys-n\" placeholder=\"Ad\" class=\"ek-input h-8 text-xs\">\r\n                            <input id=\"sys-p\" type=\"number\" placeholder=\"Fiyat\" class=\"ek-input h-8 w-16 text-xs\">\r\n                            <input id=\"sys-m\" type=\"number\" placeholder=\"Min.H\" class=\"ek-input h-8 w-16 text-xs\">\r\n                            <button onclick=\"APP.admin.addSys()\" class=\"bg-blue-600 text-white px-2 rounded text-xs\">+<\/button>\r\n                        <\/div>\r\n                        <div id=\"adm-sys-list\" class=\"space-y-2\"><\/div>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"bg-white p-4 rounded-xl border shadow-sm\">\r\n                         <h3 class=\"font-bold text-xs text-purple-600 mb-2\">PROF\u0130L RENKLER\u0130<\/h3>\r\n                         <div id=\"adm-prof-list\" class=\"grid grid-cols-2 gap-2\"><\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"bg-white p-4 rounded-xl border shadow-sm\">\r\n                         <h3 class=\"font-bold text-xs text-emerald-600 mb-2\">CAM FARKLARI<\/h3>\r\n                         <div id=\"adm-glass-list\" class=\"grid grid-cols-2 gap-2\"><\/div>\r\n                    <\/div>\r\n\r\n                <\/div>\r\n                <div class=\"p-4 bg-white border-t text-right\">\r\n                    <button onclick=\"APP.admin.save()\" class=\"bg-blue-600 text-white px-6 py-2 rounded-lg font-bold shadow-lg hover:bg-blue-700\">T\u00dcM D\u00dcNYA \u0130\u00c7\u0130N KAYDET<\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <script>\r\n            \/\/ GLOBAL DE\u011e\u0130\u015eKENLER VE AYARLAR\r\n            const AJAX_URL = 'https:\/\/www.ekincilercambalkon.tr\/wp-admin\/admin-ajax.php';\r\n            const ICONS = ['\ud83c\udfe0','\ud83d\udc8e','\ud83d\udd25','\u2728','\ud83d\udee1\ufe0f','\ud83c\udfd7\ufe0f','\ud83c\udfe2','\ud83d\udeaa'];\r\n            \r\n            const APP = {\r\n                db: null,\r\n                state: { sys:null, glass:null, prof:null },\r\n\r\n                \/\/ BA\u015eLAT\r\n                init: async function() {\r\n                    document.getElementById('loading-msg').classList.remove('hidden');\r\n                    \r\n                    \/\/ Sunucudan Veri \u00c7ek (AJAX)\r\n                    try {\r\n                        const formData = new FormData();\r\n                        formData.append('action', 'ekinciler_get_v14');\r\n                        const req = await fetch(AJAX_URL, { method:'POST', body:formData });\r\n                        \r\n                        \/\/ WP sunucusu hata metni (Notice) basarsa kodun \u00e7\u00f6kmemesi i\u00e7in Text olarak al\u0131yoruz\r\n                        const textRes = await req.text();\r\n                        try {\r\n                            const jsonMatch = textRes.match(\/\\{.*\\}\/s);\r\n                            this.db = JSON.parse(jsonMatch ? jsonMatch[0] : textRes);\r\n                        } catch(err) {\r\n                            console.error('JSON \u00c7evirme Hatas\u0131', err);\r\n                        }\r\n                    } catch(e) {\r\n                        console.error('Veri \u00e7ekilemedi', e);\r\n                    }\r\n\r\n                    \/\/ KR\u0130T\u0130K G\u00dcVENL\u0130K (FALLBACK): \r\n                    \/\/ E\u011fer veritaban\u0131ndan \u00e7ekilen veri bo\u015f gelirse veya bozuksa yedek sistemi y\u00fckle\r\n                    if (!this.db || !this.db.systems) {\r\n                        this.db = {\r\n                            showPrices: false,\r\n                            campaignActive: true,\r\n                            campaignText: 'KI\u015e KAMPANYASI BA\u015eLADI! PE\u015e\u0130N \u00d6DEMEDE %10 \u0130ND\u0130R\u0130M.',\r\n                            systems: [\r\n                                {id: 'S1', name: 'Cam Balkon 8mm', price: 3500, minH: 1.50, icon: '\ud83d\udee1\ufe0f'},\r\n                                {id: 'S2', name: 'Klasik S\u00fcrme', price: 4000, minH: 1.50, icon: '\u2194\ufe0f'},\r\n                                {id: 'S3', name: 'Kasetli S\u00fcrme', price: 4500, minH: 1.50, icon: '\ud83d\udce6'},\r\n                                {id: 'S4', name: 'Is\u0131 Caml\u0131 Seri', price: 5500, minH: 1.80, icon: '\ud83d\udd25'}\r\n                            ],\r\n                            glass: [\r\n                                {id: 'G1', name: '\u015eeffaf', price: 0, color: 'rgba(220,240,255,0.4)'},\r\n                                {id: 'G2', name: 'F\u00fcme', price: 150, color: 'rgba(50,50,50,0.7)'},\r\n                                {id: 'G3', name: 'Mavi', price: 200, color: 'rgba(60,130,250,0.6)'},\r\n                                {id: 'G4', name: 'Ye\u015fil', price: 200, color: 'rgba(40,180,100,0.6)'},\r\n                                {id: 'G5', name: 'Bronz', price: 150, color: 'rgba(180,100,40,0.6)'}\r\n                            ],\r\n                            profiles: [\r\n                                {id: 'P1', name: 'Antrasit Gri'},{id: 'P2', name: 'Eloksal (Gri)'},{id: 'P3', name: 'Bronz'},{id: 'P4', name: 'Beyaz'},{id: 'P5', name: 'Siyah'},{id: 'P6', name: 'Ah\u015fap Desen'}\r\n                            ]\r\n                        };\r\n                    } else {\r\n                        \/\/ Veritaban\u0131ndan gelen \"false\" metinlerini ger\u00e7ek boolean de\u011ferine zorla d\u00f6n\u00fc\u015ft\u00fcr\r\n                        this.db.showPrices = (String(this.db.showPrices) === 'true' || this.db.showPrices === 1);\r\n                        this.db.campaignActive = (String(this.db.campaignActive) === 'true' || this.db.campaignActive === 1);\r\n                    }\r\n\r\n                    \/\/ KR\u0130T\u0130K D\u00dcZELTME: Veritaban\u0131 bozulmalar\u0131nda Objeye d\u00f6n\u00fc\u015fen Listeleri zorla Listeye (Array) \u00e7evir!\r\n                    \/\/ Bu sayede .forEach() komutu asla \u00e7\u00f6kmez ve men\u00fcler her zaman ekrana bas\u0131l\u0131r.\r\n                    this.db.systems = Array.isArray(this.db.systems) ? this.db.systems : Object.values(this.db.systems || {});\r\n                    this.db.glass = Array.isArray(this.db.glass) ? this.db.glass : Object.values(this.db.glass || {});\r\n                    this.db.profiles = Array.isArray(this.db.profiles) ? this.db.profiles : Object.values(this.db.profiles || {});\r\n\r\n                    document.getElementById('loading-msg').classList.add('hidden');\r\n                    this.renderAll();\r\n                    this.ui.fillPanels();\r\n                },\r\n\r\n                renderAll: function() {\r\n                    if (!this.db) return; \/\/ G\u00fcvenlik kontrol\u00fc\r\n                    this.ui.renderCamp();\r\n                    this.ui.renderSys();\r\n                    this.ui.renderGlass();\r\n                    this.ui.renderProf();\r\n                },\r\n\r\n                ui: {\r\n                    renderCamp: () => {\r\n                        const s = document.getElementById('campaign-strip');\r\n                        if(APP.db.campaignActive) {\r\n                            s.classList.remove('hidden');\r\n                            document.getElementById('campaign-content').innerText = APP.db.campaignText;\r\n                        } else {\r\n                            s.classList.add('hidden');\r\n                        }\r\n                    },\r\n                    renderSys: () => {\r\n                        const el = document.getElementById('grid-sys');\r\n                        el.innerHTML = '';\r\n                        if(!APP.db.systems || APP.db.systems.length === 0) return;\r\n                        APP.db.systems.forEach(s => {\r\n                            const pTxt = APP.db.showPrices ? `<span class=\"bg-blue-50 text-blue-600 px-1 rounded font-bold\">${s.price}\u20ba<\/span>` : '<span class=\"italic text-gray-400\">Sorunuz<\/span>';\r\n                            el.innerHTML += `\r\n                            <div class=\"v14-card p-3 rounded-xl flex items-center gap-3\" onclick=\"APP.logic.sel('sys', '${s.id}', this)\">\r\n                                <div class=\"w-10 h-10 bg-slate-50 border rounded-lg flex items-center justify-center text-xl\">${s.icon || '\ud83d\udee1\ufe0f'}<\/div>\r\n                                <div><div class=\"font-bold text-sm text-slate-800\">${s.name}<\/div><div class=\"text-[10px] mt-0.5\">${pTxt}<\/div><\/div>\r\n                                <div class=\"check-icon absolute top-2 right-2 opacity-0 text-blue-500 transition-all scale-50\">\u2713<\/div>\r\n                            <\/div>`;\r\n                        });\r\n                    },\r\n                    renderGlass: () => {\r\n                        const el = document.getElementById('grid-glass'); el.innerHTML='';\r\n                        if(!APP.db.glass || APP.db.glass.length === 0) return;\r\n                        APP.db.glass.forEach(g => {\r\n                            el.innerHTML += `<div class=\"v14-card p-2 rounded-xl flex flex-col items-center gap-1\" onclick=\"APP.logic.sel('glass','${g.id}',this)\"><div class=\"w-6 h-6 rounded-full border shadow-sm\" style=\"background:${g.color}\"><\/div><div class=\"text-[10px] font-bold text-center\">${g.name}<\/div><\/div>`;\r\n                        });\r\n                    },\r\n                    renderProf: () => {\r\n                        const el = document.getElementById('grid-prof'); el.innerHTML='';\r\n                        if(!APP.db.profiles || APP.db.profiles.length === 0) return;\r\n                        APP.db.profiles.forEach(p => {\r\n                            el.innerHTML += `<div class=\"v14-card p-3 rounded-xl text-center flex items-center justify-center\" onclick=\"APP.logic.sel('prof','${p.id}',this)\"><span class=\"text-[10px] font-bold text-slate-700\">${p.name}<\/span><\/div>`;\r\n                        });\r\n                    },\r\n                    fillPanels: () => {\r\n                        const s = document.getElementById('inp-p');\r\n                        if(s.options.length === 0) for(let i=1;i<=20;i++) s.innerHTML+=`<option value=\"${i}\">${i} Panel<\/option>`;\r\n                    },\r\n                    close: (id) => document.getElementById(id).style.display = 'none'\r\n                },\r\n\r\n                logic: {\r\n                    sel: (type, id, el) => {\r\n                        const group = type === 'sys' ? 'grid-sys' : (type === 'glass' ? 'grid-glass' : 'grid-prof');\r\n                        document.querySelectorAll(`#${group} .v14-card`).forEach(x => x.classList.remove('active'));\r\n                        el.classList.add('active');\r\n                        if(type==='sys') APP.state.sys = APP.db.systems.find(x=>x.id==id);\r\n                        if(type==='glass') APP.state.glass = APP.db.glass.find(x=>x.id==id);\r\n                        if(type==='prof') APP.state.prof = APP.db.profiles.find(x=>x.id==id);\r\n                    },\r\n                    calc: () => {\r\n                        const s = APP.state;\r\n                        const w = parseFloat(document.getElementById('inp-w').value);\r\n                        const rawH = parseFloat(document.getElementById('inp-h').value);\r\n                        const p = parseInt(document.getElementById('inp-p').value);\r\n\r\n                        if(!s.sys || !s.glass || !s.prof || !w || !rawH) return alert('Eksik se\u00e7im yapt\u0131n\u0131z.');\r\n\r\n                        \/\/ Min Y\u00fckseklik\r\n                        let useH = rawH;\r\n                        let limit = parseFloat(s.sys.minH) || 0; \/\/ Garantili numara i\u015flemi\r\n                        let minApplied = false;\r\n                        if(rawH < limit) { useH = limit; minApplied = true; }\r\n\r\n                        \/\/ Fiyatlar\u0131 number tipine zorlayal\u0131m ki metin yan yana eklenmesin\r\n                        const sysPrice = parseFloat(s.sys.price) || 0;\r\n                        const glassPrice = parseFloat(s.glass.price) || 0;\r\n                        \r\n                        const total = (sysPrice + glassPrice) * (w * useH);\r\n                        const card = total * 1.10;\r\n\r\n                        document.getElementById('res-card').classList.remove('hidden');\r\n                        \r\n                        if(APP.db.showPrices) {\r\n                            document.getElementById('price-on').classList.remove('hidden');\r\n                            document.getElementById('price-off').classList.add('hidden');\r\n                            document.getElementById('out-price').innerText = Math.round(total).toLocaleString('tr-TR');\r\n                            document.getElementById('out-card').innerText = Math.round(card).toLocaleString('tr-TR');\r\n                        } else {\r\n                            document.getElementById('price-on').classList.add('hidden');\r\n                            document.getElementById('price-off').classList.remove('hidden');\r\n                        }\r\n\r\n                        if(minApplied) {\r\n                            document.getElementById('min-h-alert').classList.remove('hidden');\r\n                            document.getElementById('lbl-min').innerText = limit;\r\n                        } else {\r\n                            document.getElementById('min-h-alert').classList.add('hidden');\r\n                        }\r\n\r\n                        document.getElementById('res-sys').innerText = s.sys.name;\r\n                        document.getElementById('res-glass').innerText = s.glass.name;\r\n                        document.getElementById('res-prof').innerText = s.prof.name;\r\n                        document.getElementById('res-dims').innerText = `${w}m x ${useH}m`;\r\n\r\n                        APP.anim.render(p, s.glass.color);\r\n                        document.getElementById('res-card').scrollIntoView({behavior:'smooth', block:'center'});\r\n                    },\r\n                    whatsapp: () => {\r\n                        if(!APP.state.sys) return;\r\n                        const h = document.getElementById('inp-h').value;\r\n                        const limit = parseFloat(APP.state.sys.minH) || 0;\r\n                        const hNote = (parseFloat(h) < limit) ? `(Min ${limit}m uyguland\u0131)` : '';\r\n                        const pMsg = APP.db.showPrices ? `Tutar: ${document.getElementById('out-price').innerText} TL` : 'Fiyat Teklifi \u0130stiyorum';\r\n                        \r\n                        const msg = `Sipari\u015f:%0A- Sistem: ${APP.state.sys.name}%0A- Cam: ${APP.state.glass.name}%0A- Profil: ${APP.state.prof.name}%0A- \u00d6l\u00e7\u00fc: ${document.getElementById('inp-w').value} x ${h} ${hNote}%0A- Durum: ${pMsg}`;\r\n                        window.open(`https:\/\/wa.me\/905512197814?text=${msg}`, '_blank');\r\n                    }\r\n                },\r\n\r\n                \/\/ 3D \u00c7izim Fonksiyonu (h-full eklendi, b\u00f6ylece paneller g\u00f6r\u00fcn\u00fcr oldu)\r\n                anim: {\r\n                    render: (c, col) => {\r\n                        const el = document.getElementById('stage-content'); el.innerHTML='';\r\n                        for(let i=0;i<c;i++){\r\n                            const d=document.createElement('div'); d.className='panel-3d flex-1 h-full mx-[1px] rounded-sm';\r\n                            d.style.background = col ? col.replace('0.4','0.7') : 'rgba(200,200,200,0.5)';\r\n                            el.appendChild(d);\r\n                        }\r\n                    },\r\n                    reset: () => document.querySelectorAll('.panel-3d').forEach(p=>p.style.transform='rotateY(0deg)'),\r\n                    left: () => document.querySelectorAll('.panel-3d').forEach((p,i)=>p.style.transform=`rotateY(60deg) translate3d(-${i*5}px,0,-${i*10}px)`),\r\n                    right: () => document.querySelectorAll('.panel-3d').forEach((p,i)=>p.style.transform=`rotateY(-60deg) translate3d(${i*5}px,0,-${i*10}px)`)\r\n                },\r\n\r\n                admin: {\r\n                    openLogin: () => document.getElementById('modal-login').style.display='flex',\r\n                    login: () => {\r\n                        if(document.getElementById('pass-input').value === '2420712hH') {\r\n                            APP.ui.close('modal-login');\r\n                            APP.admin.dash();\r\n                        } else alert('Hatal\u0131 \u015eifre');\r\n                    },\r\n                    dash: () => {\r\n                        document.getElementById('modal-dash').style.display='flex';\r\n                        document.getElementById('adm-show-price').checked = APP.db.showPrices;\r\n                        document.getElementById('adm-camp-active').checked = APP.db.campaignActive;\r\n                        document.getElementById('adm-camp-text').value = APP.db.campaignText;\r\n\r\n                        \/\/ Sistem Listesi\r\n                        const sl = document.getElementById('adm-sys-list'); sl.innerHTML='';\r\n                        if(APP.db.systems && APP.db.systems.length > 0) {\r\n                            APP.db.systems.forEach((s,i) => {\r\n                                sl.innerHTML += `<div class=\"flex items-center gap-2 bg-slate-100 p-2 rounded text-xs border\"><span class=\"font-bold flex-1\">${s.name}<\/span><input type=\"number\" value=\"${s.price}\" class=\"w-12 p-1 border rounded\" onchange=\"APP.db.systems[${i}].price=parseFloat(this.value)||0\"><input type=\"number\" value=\"${s.minH||0}\" class=\"w-10 p-1 border rounded text-orange-600\" step=\"0.1\" onchange=\"APP.db.systems[${i}].minH=parseFloat(this.value)||0\"><button onclick=\"APP.db.systems.splice(${i},1);APP.admin.dash()\" class=\"text-red-500 font-bold\">X<\/button><\/div>`;\r\n                            });\r\n                        }\r\n                        \r\n                        \/\/ Profil Listesi\r\n                        const pl = document.getElementById('adm-prof-list'); pl.innerHTML='';\r\n                        if(APP.db.profiles && APP.db.profiles.length > 0) {\r\n                            APP.db.profiles.forEach((p,i) => {\r\n                                pl.innerHTML += `<div class=\"flex justify-between bg-slate-100 p-2 rounded text-xs border\"><input value=\"${p.name}\" class=\"bg-transparent font-bold w-full\" onchange=\"APP.db.profiles[${i}].name=this.value\"><button onclick=\"APP.db.profiles.splice(${i},1);APP.admin.dash()\" class=\"text-red-500 font-bold ml-1\">X<\/button><\/div>`;\r\n                            });\r\n                        }\r\n\r\n                        \/\/ Cam Listesi\r\n                        const gl = document.getElementById('adm-glass-list'); gl.innerHTML='';\r\n                        if(APP.db.glass && APP.db.glass.length > 0) {\r\n                            APP.db.glass.forEach((g,i) => {\r\n                                gl.innerHTML += `<div class=\"flex justify-between bg-slate-100 p-2 rounded text-xs border\"><span class=\"font-bold\">${g.name}<\/span><input type=\"number\" value=\"${g.price}\" class=\"w-12 p-1 border rounded\" onchange=\"APP.db.glass[${i}].price=parseFloat(this.value)||0\"><\/div>`;\r\n                            });\r\n                        }\r\n                    },\r\n                    addSys: () => {\r\n                        const n = document.getElementById('sys-n').value;\r\n                        const p = document.getElementById('sys-p').value;\r\n                        const m = document.getElementById('sys-m').value;\r\n                        \r\n                        if(n && p) { \r\n                            if(!Array.isArray(APP.db.systems)) APP.db.systems = []; \/\/ Hata \u00d6nleyici\r\n                            \r\n                            APP.db.systems.push({\r\n                                id: 'S' + Date.now(), \r\n                                name: n, \r\n                                price: parseFloat(p) || 0, \/\/ Metin de\u011fil Say\u0131\r\n                                minH: parseFloat(m) || 0,  \/\/ Metin de\u011fil Say\u0131\r\n                                icon: ICONS[Math.floor(Math.random() * ICONS.length)]\r\n                            }); \r\n                            \r\n                            APP.admin.dash(); \r\n                            \r\n                            \/\/ Kullan\u0131c\u0131 deneyimi: Eklendikten sonra kutucuklar\u0131 temizle\r\n                            document.getElementById('sys-n').value = '';\r\n                            document.getElementById('sys-p').value = '';\r\n                            document.getElementById('sys-m').value = '';\r\n                        } else {\r\n                            alert('L\u00fctfen sistem ad\u0131n\u0131 ve fiyat\u0131n\u0131 girdi\u011finizden emin olun.');\r\n                        }\r\n                    },\r\n                    save: async () => {\r\n                        APP.db.showPrices = document.getElementById('adm-show-price').checked;\r\n                        APP.db.campaignActive = document.getElementById('adm-camp-active').checked;\r\n                        APP.db.campaignText = document.getElementById('adm-camp-text').value;\r\n\r\n                        \/\/ AJAX \u0130le Kaydet - Base64 ile \u015fifrelenerek g\u00f6nderiliyor (G\u00fcvenlik Duvar\u0131n\u0131 a\u015fmak i\u00e7in)\r\n                        const fd = new FormData();\r\n                        fd.append('action', 'ekinciler_save_v14');\r\n                        fd.append('password', '2420712hH');\r\n                        fd.append('data', btoa(unescape(encodeURIComponent(JSON.stringify(APP.db)))));\r\n                        \r\n                        try {\r\n                            const req = await fetch(AJAX_URL, { method:'POST', body:fd });\r\n                            const textRes = await req.text(); \/\/ Sunucu Hata Verirse \u00c7\u00f6kmemesi \u0130\u00e7in Text Okunur\r\n                            \r\n                            \/\/ WP ajax \"0\" d\u00f6nd\u00fcrd\u00fcyse i\u015flem yetkisi reddedilmi\u015ftir\r\n                            if (textRes.trim() === \"0\") {\r\n                                alert(\"Kritik Hata: WordPress AJAX iste\u011fini engelledi. Kodunuzdaki 'nopriv' eklentisi tam i\u015flenmemi\u015f olabilir.\");\r\n                                return;\r\n                            }\r\n\r\n                            try {\r\n                                const jsonMatch = textRes.match(\/\\{.*\\}\/s);\r\n                                const res = JSON.parse(jsonMatch ? jsonMatch[0] : textRes);\r\n                                \r\n                                if(res.success) { \r\n                                    alert(res.data || 'Kay\u0131t Ba\u015far\u0131l\u0131!');\r\n                                    location.reload(); \r\n                                }\r\n                                else {\r\n                                    alert('Hata: ' + (res.data || 'Bilinmeyen Hata'));\r\n                                }\r\n                            } catch (parseErr) {\r\n                                console.error('Sunucu Yan\u0131t\u0131:', textRes);\r\n                                alert('WordPress sunucusu kaydetmeyi engelledi (JSON Hatas\u0131). G\u00fcvenlik eklentilerini kontrol edin.');\r\n                            }\r\n                        } catch(e) { \r\n                            alert('Ba\u011flant\u0131 hatas\u0131 ya\u015fand\u0131.'); \r\n                        }\r\n                    }\r\n                }\r\n            };\r\n            \r\n            setTimeout(() => APP.init(), 100);\r\n        <\/script>\r\n    <\/div>\r\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inspiro_hide_title":false,"footnotes":""},"class_list":["post-147","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ekincilercambalkon.tr\/index.php\/wp-json\/wp\/v2\/pages\/147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ekincilercambalkon.tr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ekincilercambalkon.tr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ekincilercambalkon.tr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ekincilercambalkon.tr\/index.php\/wp-json\/wp\/v2\/comments?post=147"}],"version-history":[{"count":20,"href":"https:\/\/www.ekincilercambalkon.tr\/index.php\/wp-json\/wp\/v2\/pages\/147\/revisions"}],"predecessor-version":[{"id":174,"href":"https:\/\/www.ekincilercambalkon.tr\/index.php\/wp-json\/wp\/v2\/pages\/147\/revisions\/174"}],"wp:attachment":[{"href":"https:\/\/www.ekincilercambalkon.tr\/index.php\/wp-json\/wp\/v2\/media?parent=147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}