{"id":103,"date":"2026-08-25T14:31:15","date_gmt":"2026-08-25T11:31:15","guid":{"rendered":"https:\/\/foodandcleaning.com\/?page_id=103"},"modified":"2026-08-25T14:31:15","modified_gmt":"2026-08-25T11:31:15","slug":"kripto-3","status":"publish","type":"page","link":"https:\/\/foodandcleaning.com\/?page_id=103","title":{"rendered":"Kripto 3"},"content":{"rendered":"\n<div class=\"wp-block-group alignfull is-layout-flow wp-container-core-group-is-layout-a2902c9c wp-block-group-is-layout-flow\" style=\"margin-top:0;margin-bottom:0\">\n<div class=\"wp-block-columns alignfull is-not-stacked-on-mobile is-layout-flex wp-container-core-columns-is-layout-bf39098c wp-block-columns-is-layout-flex\" style=\"margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--80);padding-left:var(--wp--preset--spacing--40)\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<div class=\"wp-block-group is-vertical is-content-justification-stretch is-layout-flex wp-container-core-group-is-layout-c3356f6f wp-block-group-is-layout-flex\">\n<h2 class=\"wp-block-heading has-xx-large-font-size\"><strong><code>    <div id=\"kpf-app-wrapper\" class=\"kpf-root-container\">\n      <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Manrope:wght@400;600;700;800&display=swap\" rel=\"stylesheet\">\n\n      <style>\n      #kpf-app-wrapper, .kpf-root-container {\n        --bg:#070b14; --panel:#0e1526; --panel2:#121a30; --border:#1d2a45;\n        --text:#e5e7eb; --muted:#8b98b8;\n        --purple:#a855f7; --blue:#38bdf8; --green:#34d399; --orange:#fbbf24; --red:#fb7185; --teal:#2dd4bf;\n        background: var(--bg) !important;\n        color: var(--text) !important;\n        font-family: 'Manrope', -apple-system, BlinkMacSystemFont, sans-serif !important;\n        display: flex !important;\n        flex-direction: column !important;\n        min-height: 100vh;\n        width: 100% !important;\n        box-sizing: border-box !important;\n        margin: 0 !important; padding: 0 !important;\n        position: relative !important;\n        z-index: 1 !important;\n      }\n\n      #kpf-app-wrapper * { box-sizing: border-box !important; margin: 0; padding: 0; font-family: inherit; }\n\n      #kpf-app-wrapper .kpf-top-navbar {\n        position: sticky !important; top: 0 !important; z-index: 99990 !important;\n        background: #0c1222 !important; border-bottom: 1px solid var(--border) !important;\n        padding: 12px 24px !important; display: flex !important; align-items: center !important; justify-content: space-between !important;\n        gap: 16px !important; flex-wrap: wrap !important; backdrop-filter: blur(10px) !important;\n        box-shadow: 0 4px 20px rgba(0,0,0,0.4) !important;\n      }\n      #kpf-app-wrapper .kpf-brand { display: flex !important; gap: 10px !important; align-items: center !important; }\n      #kpf-app-wrapper .kpf-brand .mark { width: 36px !important; height: 36px !important; border-radius: 10px !important; background: linear-gradient(135deg,#7c3aed,#a855f7) !important; display: flex !important; align-items: center !important; justify-content: center !important; font-weight: 800 !important; font-size: 17px !important; color: #fff !important; }\n      #kpf-app-wrapper .kpf-brand b { font-size: 15px !important; color: #fff !important; display: block !important; }\n      #kpf-app-wrapper .kpf-brand small { display: block !important; color: var(--muted) !important; font-size: 10px !important; letter-spacing: .12em !important; }\n\n      #kpf-app-wrapper .kpf-nav-links { display: flex !important; gap: 4px !important; align-items: center !important; flex-wrap: wrap !important; }\n      #kpf-app-wrapper .kpf-nav-links a { display: flex !important; align-items: center !important; gap: 6px !important; color: var(--muted) !important; text-decoration: none !important; font-size: 12.5px !important; font-weight: 700 !important; padding: 7px 12px !important; border-radius: 8px !important; cursor: pointer !important; transition: all 0.15s ease !important; }\n      #kpf-app-wrapper .kpf-nav-links a:hover { background: #141d34 !important; color: var(--text) !important; }\n      #kpf-app-wrapper .kpf-nav-links a.active { background: rgba(168,85,247,.16) !important; color: #d8b4fe !important; border: 1px solid rgba(168,85,247,0.3) !important; }\n\n      #kpf-app-wrapper .kpf-nav-actions { display: flex !important; gap: 8px !important; align-items: center !important; flex-wrap: wrap !important; }\n\n      #kpf-app-wrapper .kpf-main-content { flex: 1 !important; padding: 22px 24px !important; width: 100% !important; max-width: 1400px !important; margin: 0 auto !important; }\n\n      #kpf-app-wrapper .kpf-btn, #kpf-app-wrapper button.kpf-btn { border: 1px solid var(--border) !important; background: var(--panel2) !important; color: var(--text) !important; border-radius: 9px !important; padding: 8px 14px !important; font-size: 12px !important; font-weight: 700 !important; cursor: pointer !important; display: inline-flex !important; gap: 6px !important; align-items: center !important; justify-content: center !important; transition: all 0.15s ease !important; text-decoration: none !important; line-height: 1.2 !important; }\n      #kpf-app-wrapper .kpf-btn:hover { border-color: #31456f !important; background: #182440 !important; color: #fff !important; }\n      #kpf-app-wrapper .kpf-btn.primary { background: linear-gradient(135deg,#7c3aed,#a855f7) !important; border: none !important; color: #fff !important; }\n      #kpf-app-wrapper .kpf-btn.primary:hover { opacity: 0.92 !important; }\n      #kpf-app-wrapper .kpf-btn.danger { background: rgba(251,113,133,0.15) !important; color: var(--red) !important; border-color: rgba(251,113,133,0.3) !important; }\n\n      #kpf-app-wrapper .kpf-cards { display: grid !important; grid-template-columns: repeat(4, 1fr) !important; gap: 14px !important; margin-bottom: 16px !important; }\n      #kpf-app-wrapper .kpf-card { border-radius: 14px !important; padding: 16px !important; color: #fff !important; position: relative !important; overflow: hidden !important; box-shadow: 0 8px 24px rgba(0,0,0,.35) !important; }\n      #kpf-app-wrapper .kpf-card .t { font-size: 11px !important; font-weight: 700 !important; opacity: .92 !important; letter-spacing: 0.04em !important; text-transform: uppercase !important; }\n      #kpf-app-wrapper .kpf-card .ico { position: absolute !important; right: 14px !important; top: 14px !important; width: 26px !important; height: 26px !important; border-radius: 8px !important; background: rgba(255,255,255,.18) !important; display: flex !important; align-items: center !important; justify-content: center !important; font-size: 13px !important; }\n      #kpf-app-wrapper .kpf-card .v { font-size: 22px !important; font-weight: 800 !important; margin: 6px 0 4px !important; }\n      #kpf-app-wrapper .kpf-card .s { font-size: 11px !important; font-weight: 600 !important; opacity: .9 !important; }\n\n      #kpf-app-wrapper .g-purple{background:linear-gradient(135deg,#7c3aed,#a855f7) !important;}\n      #kpf-app-wrapper .g-blue{background:linear-gradient(135deg,#0369a1,#38bdf8) !important;}\n      #kpf-app-wrapper .g-green{background:linear-gradient(135deg,#059669,#34d399) !important;}\n      #kpf-app-wrapper .g-orange{background:linear-gradient(135deg,#d97706,#f59e0b) !important;}\n\n      #kpf-app-wrapper .rates-grid{display:flex !important;flex-direction:column !important;gap:4px !important;margin-top:6px !important;font-size:11px !important;background:rgba(0,0,0,0.3) !important;padding:8px 10px !important;border-radius:9px !important;border:1px solid rgba(255,255,255,0.18) !important;}\n      #kpf-app-wrapper .rates-grid .r-row{display:flex !important;justify-content:space-between !important;align-items:center !important;white-space:nowrap !important;}\n      #kpf-app-wrapper .rates-grid b{font-weight:800 !important;color:#fff !important;}\n      #kpf-app-wrapper .rates-meta{font-size:9.5px !important;color:rgba(255,255,255,0.75) !important;margin-top:4px !important;display:flex !important;align-items:center !important;gap:4px !important;}\n      #kpf-app-wrapper .pulse-dot{width:6px !important;height:6px !important;border-radius:50% !important;background:#34d399 !important;box-shadow:0 0 8px #34d399 !important;display:inline-block !important;}\n\n      #kpf-app-wrapper .kpf-panel { background: var(--panel) !important; border: 1px solid var(--border) !important; border-radius: 14px !important; padding: 16px !important; margin-bottom: 16px !important; }\n      #kpf-app-wrapper .kpf-panel h3 { font-size: 13.5px !important; margin-bottom: 12px !important; display: flex !important; justify-content: space-between !important; align-items: center !important; color: #fff !important; font-weight: 800 !important; border: none !important; padding: 0 !important; }\n      #kpf-app-wrapper .kpf-row2 { display: grid !important; grid-template-columns: 2.2fr 1fr !important; gap: 14px !important; margin-bottom: 16px !important; }\n      #kpf-app-wrapper .kpf-chartbox { position: relative !important; height: 240px !important; width: 100% !important; }\n\n      #kpf-app-wrapper table { width: 100% !important; border-collapse: collapse !important; font-size: 12px !important; background: transparent !important; }\n      #kpf-app-wrapper th { color: var(--muted) !important; font-size: 10px !important; letter-spacing: .1em !important; text-align: left !important; padding: 9px 10px !important; border-bottom: 1px solid var(--border) !important; background: rgba(10,17,34,0.5) !important; }\n      #kpf-app-wrapper td { padding: 10px !important; border-bottom: 1px solid #16203a !important; vertical-align: middle !important; color: var(--text) !important; background: transparent !important; }\n      #kpf-app-wrapper tr:last-child td { border-bottom: none !important; }\n      #kpf-app-wrapper tr:hover td { background: rgba(20,29,52,0.4) !important; }\n\n      #kpf-app-wrapper .coin { display: flex !important; gap: 10px !important; align-items: center !important; }\n      #kpf-app-wrapper .coin .c { width: 32px !important; height: 32px !important; border-radius: 50% !important; display: flex !important; align-items: center !important; justify-content: center !important; background: #1a2540 !important; overflow: hidden !important; flex-shrink: 0 !important; border: 1px solid var(--border) !important; }\n      #kpf-app-wrapper .coin .c img { width: 100% !important; height: 100% !important; object-fit: cover !important; border-radius: 50% !important; display: block !important; }\n      #kpf-app-wrapper .coin b { font-size: 12.5px !important; color: #fff !important; }\n      #kpf-app-wrapper .coin small { color: var(--muted) !important; display: block !important; font-size: 10px !important; }\n\n      #kpf-app-wrapper .ex-badge { display: inline-flex !important; align-items: center !important; gap: 4px !important; padding: 3px 8px !important; border-radius: 6px !important; font-size: 11px !important; font-weight: 700 !important; }\n      #kpf-app-wrapper .ex-binance{background:rgba(240,185,11,0.15) !important;color:#f3ba2f !important;border:1px solid rgba(240,185,11,0.4) !important;}\n\n      #kpf-app-wrapper .badge { padding: 3px 9px !important; border-radius: 20px !important; font-size: 10px !important; font-weight: 800 !important; display: inline-block !important; }\n      #kpf-app-wrapper .badge.up { background: rgba(52,211,153,.14) !important; color: var(--green) !important; }\n      #kpf-app-wrapper .badge.down { background: rgba(251,113,133,.14) !important; color: var(--red) !important; }\n      #kpf-app-wrapper .mini { background: #182440 !important; border: none !important; color: var(--muted) !important; border-radius: 7px !important; padding: 4px 8px !important; font-size: 11px !important; font-weight: 700 !important; cursor: pointer !important; transition: all 0.15s ease !important; }\n      #kpf-app-wrapper .mini:hover { color: #fff !important; background: #24334f !important; }\n      #kpf-app-wrapper .mini.primary { background: linear-gradient(135deg,#7c3aed,#a855f7) !important; color: #fff !important; }\n      #kpf-app-wrapper .mini.danger:hover { background: rgba(251,113,133,0.3) !important; color: var(--red) !important; }\n\n      #kpf-app-wrapper .partner { display: flex !important; align-items: center !important; gap: 10px !important; padding: 9px 4px !important; border-bottom: 1px solid #16203a !important; }\n      #kpf-app-wrapper .partner .av { width: 34px !important; height: 34px !important; border-radius: 10px !important; display: flex !important; align-items: center !important; justify-content: center !important; font-weight: 800 !important; font-size: 12px !important; color: #fff !important; background: linear-gradient(135deg,#7c3aed,#a855f7) !important; }\n      #kpf-app-wrapper .partner .inf { flex: 1 !important; min-width: 0 !important; }\n      #kpf-app-wrapper .pbar { height: 5px !important; background: #1a2540 !important; border-radius: 4px !important; margin-top: 6px !important; overflow: hidden !important; }\n      #kpf-app-wrapper .pbar i { display: block !important; height: 100% !important; border-radius: 4px !important; }\n\n      #kpf-app-wrapper .coin-search-wrap{position:relative !important;margin-bottom:10px !important;}\n      #kpf-app-wrapper .search-input{background:#0a1122 !important;border:1px solid var(--border) !important;color:#fff !important;border-radius:9px !important;padding:10px 12px !important;font-size:13px !important;width:100% !important;outline:none !important;}\n      #kpf-app-wrapper .search-input:focus{border-color:var(--purple) !important;box-shadow:0 0 0 2px rgba(168,85,247,0.2) !important;}\n      #kpf-app-wrapper .coin-list-results{max-height:220px !important;overflow-y:auto !important;background:#0a1122 !important;border:1px solid var(--border) !important;border-radius:10px !important;margin-top:6px !important;display:flex !important;flex-direction:column !important;}\n      #kpf-app-wrapper .coin-item{display:flex !important;align-items:center !important;justify-content:space-between !important;padding:9px 12px !important;border-bottom:1px solid #16203a !important;cursor:pointer !important;transition:background 0.15s ease !important;}\n      #kpf-app-wrapper .coin-item:last-child{border-bottom:none !important;}\n      #kpf-app-wrapper .coin-item:hover,#kpf-app-wrapper .coin-item.selected{background:#141d34 !important;}\n      #kpf-app-wrapper .coin-item .left{display:flex !important;align-items:center !important;gap:10px !important;}\n      #kpf-app-wrapper .coin-item img{width:24px !important;height:24px !important;border-radius:50% !important;object-fit:contain !important;}\n      #kpf-app-wrapper .coin-item .title{font-weight:700 !important;font-size:12.5px !important;color:#fff !important;}\n      #kpf-app-wrapper .coin-item .sub{color:var(--muted) !important;font-size:10.5px !important;text-transform:uppercase !important;}\n      #kpf-app-wrapper .coin-item .price{font-weight:700 !important;color:var(--green) !important;font-size:12px !important;}\n\n      .kpf-modal { position: fixed !important; inset: 0 !important; background: rgba(3,6,14,.85) !important; backdrop-filter: blur(5px) !important; display: none; align-items: center !important; justify-content: center !important; z-index: 9999999 !important; }\n      .kpf-modal.open { display: flex !important; }\n      .kpf-mbox { background: #0e1526 !important; border: 1px solid #1d2a45 !important; border-radius: 16px !important; width: 540px !important; max-width: 94vw !important; max-height: 90vh !important; overflow-y: auto !important; padding: 20px !important; color: #e5e7eb !important; box-shadow: 0 20px 50px rgba(0,0,0,0.8) !important; }\n      .kpf-mbox h3 { margin-bottom: 14px !important; font-size: 15px !important; color: #fff !important; font-weight: 800 !important; display: flex !important; justify-content: space-between !important; align-items: center !important; }\n      .kpf-frow { margin-bottom: 12px !important; }\n      .kpf-frow label { display: block !important; font-size: 11px !important; color: #8b98b8 !important; font-weight: 700 !important; margin-bottom: 5px !important; }\n      .kpf-mfoot { display: flex !important; gap: 8px !important; justify-content: flex-end !important; margin-top: 16px !important; }\n\n      #kpf-app-wrapper input, #kpf-app-wrapper select { background: #0a1122 !important; border: 1px solid var(--border) !important; color: var(--text) !important; border-radius: 9px !important; padding: 9px 11px !important; font-size: 12.5px !important; width: 100% !important; outline: none !important; }\n      #kpf-app-wrapper input:focus, #kpf-app-wrapper select:focus { border-color: var(--purple) !important; }\n\n      #kpf-toasts { position: fixed !important; right: 18px !important; bottom: 18px !important; display: flex !important; flex-direction: column !important; gap: 8px !important; z-index: 99999999 !important; }\n      .kpf-toast { background: #121a30 !important; border: 1px solid #1d2a45 !important; border-left: 4px solid #a855f7 !important; border-radius: 10px !important; padding: 11px 16px !important; font-size: 12.5px !important; font-weight: 600 !important; color: #fff !important; box-shadow: 0 10px 25px rgba(0,0,0,0.5) !important; animation: kpfTin .25s ease !important; }\n      .kpf-toast.err { border-left-color: #fb7185 !important; }\n      .kpf-toast.ok { border-left-color: #34d399 !important; }\n      @keyframes kpfTin { from { transform: translateY(8px); opacity: 0; } }\n\n      @media(max-width:1150px){ #kpf-app-wrapper .kpf-cards { grid-template-columns: repeat(2, 1fr) !important; } #kpf-app-wrapper .kpf-row2 { grid-template-columns: 1fr !important; } }\n      @media(max-width:600px){ #kpf-app-wrapper .kpf-cards { grid-template-columns: 1fr !important; } #kpf-app-wrapper .kpf-top-navbar { flex-direction: column !important; align-items: flex-start !important; } }\n      <\/style>\n\n      <!-- \u00dcST MEN\u00dc BAR -->\n      <nav class=\"kpf-top-navbar\">\n        <div class=\"kpf-brand\">\n          <div class=\"mark\">\u20bf<\/div>\n          <div><b>KriptoPortf\u00f6y<\/b><small>PRO PANEL v3.2<\/small><\/div>\n        <\/div>\n        <div class=\"kpf-nav-links\">\n          <a class=\"active\" onclick=\"window.kpfScrollTo('secSummary')\"><span>\u25a6<\/span> Panel<\/a>\n          <a onclick=\"window.kpfScrollTo('secCharts')\"><span>\ud83d\udcc8<\/span> Analiz & Grafikler<\/a>\n          <a onclick=\"window.kpfScrollTo('secHoldings')\"><span>\ud83e\ude99<\/span> Varl\u0131klar<\/a>\n          <a onclick=\"window.kpfScrollTo('secPartners')\"><span>\ud83d\udc65<\/span> Ortaklar<\/a>\n          <a onclick=\"window.kpfScrollTo('secTxs')\"><span>\ud83d\udcdc<\/span> \u0130\u015flemler<\/a>\n          <a onclick=\"window.kpfScrollTo('secSubs')\"><span>\ud83d\udce7<\/span> E-Posta Aboneleri<\/a>\n          <a onclick=\"window.kpfOpenModal('modalSettings')\"><span>\u2699\ufe0f<\/span> Ayarlar<\/a>\n        <\/div>\n        <div class=\"kpf-nav-actions\">\n          <button class=\"kpf-btn primary\" onclick=\"window.kpfOpenModal('modalHolding')\"><span>+<\/span> Varl\u0131k Ekle<\/button>\n          <button class=\"kpf-btn\" onclick=\"window.kpfOpenModal('modalBulkMail')\"><span>\ud83d\udce7<\/span> Rapor G\u00f6nder<\/button>\n          <button class=\"kpf-btn\" onclick=\"window.kpfFetchState(true)\"><span>\ud83d\udd04<\/span> Yenile<\/button>\n        <\/div>\n      <\/nav>\n\n      <div class=\"kpf-main-content\" id=\"kpfMainContainer\">\n        <!-- KARTLAR -->\n        <div class=\"kpf-cards\" id=\"secSummary\">\n          <div class=\"kpf-card g-purple\">\n            <div class=\"t\">TOPLAM PORTF\u00d6Y DE\u011eER\u0130<\/div>\n            <div class=\"ico\">\ud83d\udcb0<\/div>\n            <div class=\"v\" id=\"valTotal\">\u20ba0<\/div>\n            <div class=\"s\" id=\"valUsdTotal\">$0.00<\/div>\n          <\/div>\n          <div class=\"kpf-card g-blue\">\n            <div class=\"t\">PORTF\u00d6Y VARLIKLARI & ANLIK KURLAR<\/div>\n            <div class=\"ico\">\ud83e\ude99<\/div>\n            <div class=\"v\" id=\"valCount\" style=\"font-size:18px;\">0 Adet Kripto Varl\u0131k<\/div>\n            <div class=\"rates-grid\">\n              <div class=\"r-row\"><span>\ud83d\udcb5 Dolar (USD):<\/span> <b id=\"rateUsdVal\">\u20ba34.85<\/b><\/div>\n              <div class=\"r-row\"><span>\ud83d\udcb6 Euro (EUR):<\/span> <b id=\"rateEurVal\">\u20ba38.15<\/b><\/div>\n              <div class=\"r-row\"><span>\ud83e\ude99 Gram Alt\u0131n (GAU):<\/span> <b id=\"rateGauVal\">\u20ba2,950<\/b><\/div>\n              <div class=\"rates-meta\"><span class=\"pulse-dot\"><\/span> <span id=\"ratesTimestamp\">Canl\u0131 3 Kaynaktan Onaylan\u0131yor...<\/span><\/div>\n            <\/div>\n          <\/div>\n          <div class=\"kpf-card g-green\">\n            <div class=\"t\">TOPLAM K\u00c2R \/ ZARAR DURUMU<\/div>\n            <div class=\"ico\">\ud83d\udcc8<\/div>\n            <div class=\"v\" id=\"valPnl\">\u20ba0<\/div>\n            <div class=\"s\" id=\"valPnlPct\">%0.00 Toplam Getiri<\/div>\n          <\/div>\n          <div class=\"kpf-card g-orange\">\n            <div class=\"t\">Y\u00d6NET\u0130C\u0130 PAYI (%60)<\/div>\n            <div class=\"ico\">\ud83d\udc65<\/div>\n            <div class=\"v\" id=\"valLeader\">\u20ba0<\/div>\n            <div class=\"s\" id=\"valInvestor\">Yat\u0131r\u0131mc\u0131 Pay\u0131: \u20ba0 (%40)<\/div>\n          <\/div>\n        <\/div>\n\n        <!-- GRAF\u0130KLER -->\n        <div class=\"kpf-row2\" id=\"secCharts\">\n          <div class=\"kpf-panel\">\n            <h3><span>\ud83d\udcc8 PORTF\u00d6Y PERFORMANS E\u011eR\u0130S\u0130 <small style=\"color:var(--muted); font-weight:normal;\">(Al\u0131\u015f Tarihinden Bug\u00fcne)<\/small><\/span><\/h3>\n            <div class=\"kpf-chartbox\"><canvas id=\"chartPerf\"><\/canvas><\/div>\n          <\/div>\n          <div class=\"kpf-panel\">\n            <h3><span>\ud83e\udd67 VARLIK DA\u011eILIMI<\/span><\/h3>\n            <div class=\"kpf-chartbox\"><canvas id=\"chartPie\"><\/canvas><\/div>\n          <\/div>\n        <\/div>\n\n        <!-- VARLIK PORTF\u00d6Y L\u0130STES\u0130 -->\n        <div class=\"kpf-panel\" id=\"secHoldings\">\n          <h3>\n            <span>\ud83e\ude99 VARLIK PORTF\u00d6Y L\u0130STES\u0130<\/span>\n            <button class=\"kpf-btn primary\" style=\"padding:5px 10px; font-size:11px;\" onclick=\"window.kpfOpenModal('modalHolding')\">\u2795 Varl\u0131k Ekle<\/button>\n          <\/h3>\n          <div style=\"overflow-x:auto;\">\n            <table>\n              <thead>\n                <tr>\n                  <th>VARLIK \/ CO\u0130N<\/th>\n                  <th>BORSA \/ C\u00dcZDAN<\/th>\n                  <th>M\u0130KTAR<\/th>\n                  <th>ALI\u015e F\u0130YATI<\/th>\n                  <th>ALI\u015e TAR\u0130H\u0130<\/th>\n                  <th>G\u00dcNCEL F\u0130YAT (USD)<\/th>\n                  <th>TOPLAM DE\u011eER<\/th>\n                  <th>K\u00c2R \/ ZARAR<\/th>\n                  <th>\u0130\u015eLEM<\/th>\n                <\/tr>\n              <\/thead>\n              <tbody id=\"tbHoldings\">\n                <tr><td colspan=\"9\" style=\"text-align:center; padding:20px; color:var(--muted);\">Veriler y\u00fckleniyor...<\/td><\/tr>\n              <\/tbody>\n            <\/table>\n          <\/div>\n        <\/div>\n\n        <!-- ORTAKLAR VE \u0130\u015eLEMLER -->\n        <div class=\"kpf-row2\">\n          <div class=\"kpf-panel\" id=\"secPartners\">\n            <h3>\n              <span>\ud83d\udc65 ORTAK PAY DA\u011eILIMI VE HAKED\u0130\u015e<\/span>\n              <button class=\"kpf-btn\" style=\"padding:5px 10px; font-size:11px;\" onclick=\"window.kpfOpenModal('modalPartner')\">\u2795 Ortak Ekle<\/button>\n            <\/h3>\n            <div id=\"boxPartners\"><div style=\"color:var(--muted); font-size:12px;\">Y\u00fckleniyor...<\/div><\/div>\n          <\/div>\n          <div class=\"kpf-panel\" id=\"secTxs\">\n            <h3>\n              <span>\ud83d\udcdc SON \u0130\u015eLEM GE\u00c7M\u0130\u015e\u0130<\/span>\n              <button class=\"kpf-btn\" style=\"padding:5px 10px; font-size:11px;\" onclick=\"window.kpfOpenModal('modalTx')\">\u2795 \u0130\u015flem Ekle<\/button>\n            <\/h3>\n            <div id=\"boxTxs\"><div style=\"color:var(--muted); font-size:12px;\">Y\u00fckleniyor...<\/div><\/div>\n          <\/div>\n        <\/div>\n\n        <!-- E-POSTA ABONELER\u0130 -->\n        <div class=\"kpf-panel\" id=\"secSubs\">\n          <h3>\n            <span>\ud83d\udce7 E-POSTA ABONELER\u0130 VE OTOMAT\u0130K RAPORLAMA<\/span>\n            <div style=\"display:flex; gap:8px;\">\n              <button class=\"kpf-btn primary\" style=\"padding:6px 12px; font-size:11.5px;\" onclick=\"window.kpfOpenModal('modalBulkMail')\">\ud83d\udce7 Rapor G\u00f6nder<\/button>\n              <button class=\"kpf-btn\" style=\"padding:6px 12px; font-size:11.5px;\" onclick=\"window.kpfOpenModal('modalSubscriber')\">\u2795 Abone Ekle<\/button>\n            <\/div>\n          <\/h3>\n          <div style=\"overflow-x:auto;\">\n            <table>\n              <thead>\n                <tr>\n                  <th>ABONE E-POSTA<\/th>\n                  <th>\u0130S\u0130M<\/th>\n                  <th>SIKLIK<\/th>\n                  <th>G\u00d6NDER\u0130M SAYISI<\/th>\n                  <th>KAYIT TAR\u0130H\u0130<\/th>\n                  <th>DURUM<\/th>\n                  <th>\u0130\u015eLEMLER<\/th>\n                <\/tr>\n              <\/thead>\n              <tbody id=\"tbSubscribers\">\n                <tr><td colspan=\"7\" style=\"text-align:center; padding:20px; color:var(--muted);\">Y\u00fckleniyor...<\/td><\/tr>\n              <\/tbody>\n            <\/table>\n          <\/div>\n        <\/div>\n\n        <!-- MA\u0130L LOGLARI -->\n        <div class=\"kpf-panel\">\n          <h3>\n            <span>\ud83d\udcdc E-POSTA G\u00d6NDER\u0130M G\u00dcNL\u00dc\u011e\u00dc (LOGS)<\/span>\n            <small id=\"logCount\">0 G\u00f6nderim<\/small>\n          <\/h3>\n          <div style=\"overflow-x:auto; max-height:220px;\">\n            <table>\n              <thead>\n                <tr>\n                  <th>ALICI E-POSTA<\/th>\n                  <th>KONU<\/th>\n                  <th>TAR\u0130H<\/th>\n                  <th>DURUM<\/th>\n                  <th>DETAY<\/th>\n                <\/tr>\n              <\/thead>\n              <tbody id=\"tbEmailLogs\">\n                <tr><td colspan=\"5\" style=\"text-align:center; padding:15px; color:var(--muted);\">Hen\u00fcz g\u00f6nderim kayd\u0131 yok.<\/td><\/tr>\n              <\/tbody>\n            <\/table>\n          <\/div>\n        <\/div>\n\n      <\/div>\n    <\/div>\n\n    <!-- MODALLAR -->\n    <!-- Modal: VARLIK EKLE \/ D\u00dcZENLE -->\n    <div class=\"kpf-modal\" id=\"modalHolding\">\n      <div class=\"kpf-mbox\">\n        <h3><span id=\"lblHoldingTitle\">\u2795 Varl\u0131k Ekle<\/span> <button class=\"mini danger\" onclick=\"window.kpfCloseModal('modalHolding')\">\u2715<\/button><\/h3>\n        <input type=\"hidden\" id=\"hdnHoldingDbId\" value=\"0\">\n        <div class=\"kpf-frow\">\n          <label>Coin Se\u00e7in veya Aray\u0131n (3 Kaynakl\u0131 Canl\u0131 Veritaban\u0131)<\/label>\n          <div class=\"coin-search-wrap\">\n            <input type=\"text\" id=\"coinSearchInput\" class=\"search-input\" placeholder=\"\ud83d\udd0d Harf yazarak saniyeler i\u00e7inde aray\u0131n (\u00d6rn: BTC, ETH, Solana, PEPE, SHIB, XRP, AVAX...)\" oninput=\"window.kpfFilterCoinSearch(this.value)\">\n            <div class=\"coin-list-results\" id=\"coinSearchResults\"><\/div>\n          <\/div>\n          <input type=\"hidden\" id=\"inpCoinId\" value=\"bitcoin\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>Borsa veya C\u00fczdan<\/label>\n          <select id=\"inpExchange\">\n            <option value=\"Binance\">Binance<\/option>\n            <option value=\"BTCTurk\">BTCTurk<\/option>\n            <option value=\"Paribu\">Paribu<\/option>\n            <option value=\"KuCoin\">KuCoin<\/option>\n            <option value=\"Gate.io\">Gate.io<\/option>\n            <option value=\"OKX\">OKX<\/option>\n            <option value=\"Bybit\">Bybit<\/option>\n            <option value=\"MEXC\">MEXC<\/option>\n            <option value=\"So\u011fuk C\u00fczdan\">So\u011fuk C\u00fczdan (Ledger\/Trezor)<\/option>\n            <option value=\"Di\u011fer\">Di\u011fer<\/option>\n          <\/select>\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>Miktar<\/label>\n          <input type=\"number\" step=\"any\" id=\"inpAmount\" placeholder=\"\u00d6rn: 1.25\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>Birim Al\u0131\u015f Fiyat\u0131 (USD)<\/label>\n          <input type=\"number\" step=\"any\" id=\"inpBuyPrice\" placeholder=\"Bo\u015f b\u0131rak\u0131l\u0131rsa anl\u0131k canl\u0131 fiyat al\u0131n\u0131r\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>Al\u0131\u015f Tarihi<\/label>\n          <input type=\"date\" id=\"inpTxDate\">\n        <\/div>\n        <div class=\"kpf-mfoot\">\n          <button class=\"kpf-btn\" onclick=\"window.kpfCloseModal('modalHolding')\">\u0130ptal<\/button>\n          <button class=\"kpf-btn primary\" onclick=\"window.kpfSaveHolding()\">Kaydet<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Modal: ORTAK EKLE -->\n    <div class=\"kpf-modal\" id=\"modalPartner\">\n      <div class=\"kpf-mbox\">\n        <h3><span>\u2795 Yeni Ortak Ekle<\/span> <button class=\"mini danger\" onclick=\"window.kpfCloseModal('modalPartner')\">\u2715<\/button><\/h3>\n        <div class=\"kpf-frow\">\n          <label>Ortak Ad\u0131 \/ Unvan\u0131<\/label>\n          <input type=\"text\" id=\"inpPartnerName\" placeholder=\"\u00d6rn: Ali (Yat\u0131r\u0131mc\u0131)\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>Hissedar Oran\u0131 (%)<\/label>\n          <input type=\"number\" step=\"any\" id=\"inpPartnerPct\" placeholder=\"\u00d6rn: 25\">\n        <\/div>\n        <div class=\"kpf-mfoot\">\n          <button class=\"kpf-btn\" onclick=\"window.kpfCloseModal('modalPartner')\">\u0130ptal<\/button>\n          <button class=\"kpf-btn primary\" onclick=\"window.kpfSavePartner()\">Kaydet<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Modal: \u0130\u015eLEM EKLE -->\n    <div class=\"kpf-modal\" id=\"modalTx\">\n      <div class=\"kpf-mbox\">\n        <h3><span>\u2795 Yeni \u0130\u015flem Kayd\u0131 Ekle<\/span> <button class=\"mini danger\" onclick=\"window.kpfCloseModal('modalTx')\">\u2715<\/button><\/h3>\n        <div class=\"kpf-frow\">\n          <label>\u0130\u015flem A\u00e7\u0131klamas\u0131<\/label>\n          <input type=\"text\" id=\"inpTxDesc\" placeholder=\"\u00d6rn: BITCOIN Ek Al\u0131m (Binance)\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>Miktar \/ Varl\u0131k<\/label>\n          <input type=\"text\" id=\"inpTxAmt\" placeholder=\"\u00d6rn: 0.5 BTC\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>Toplam \u0130\u015flem Tutar\u0131 (USD)<\/label>\n          <input type=\"number\" step=\"any\" id=\"inpTxVal\" placeholder=\"\u00d6rn: 32000\">\n        <\/div>\n        <div class=\"kpf-mfoot\">\n          <button class=\"kpf-btn\" onclick=\"window.kpfCloseModal('modalTx')\">\u0130ptal<\/button>\n          <button class=\"kpf-btn primary\" onclick=\"window.kpfSaveTx()\">Kaydet<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Modal: ABONE EKLE (Ziyaret\u00e7iler de kullanabilir) -->\n    <div class=\"kpf-modal\" id=\"modalSubscriber\">\n      <div class=\"kpf-mbox\">\n        <h3><span>\u2795 Yeni E-Posta Abonesi Ekle<\/span> <button class=\"mini danger\" onclick=\"window.kpfCloseModal('modalSubscriber')\">\u2715<\/button><\/h3>\n        <div class=\"kpf-frow\">\n          <label>Abone E-Posta Adresi<\/label>\n          <input type=\"email\" id=\"inpSubEmail\" placeholder=\"\u00d6rn: ahmet@hotmail.com\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>Abone Ad\u0131 Soyad\u0131<\/label>\n          <input type=\"text\" id=\"inpSubName\" placeholder=\"\u00d6rn: Ahmet Y\u0131lmaz\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>G\u00f6nderim S\u0131kl\u0131\u011f\u0131<\/label>\n          <select id=\"inpSubFreq\">\n            <option value=\"daily\">G\u00fcnl\u00fck Otomatik Rapor<\/option>\n            <option value=\"weekly\">Haftal\u0131k Rapor<\/option>\n            <option value=\"monthly\">Ayl\u0131k Rapor<\/option>\n          <\/select>\n        <\/div>\n        <div class=\"kpf-mfoot\">\n          <button class=\"kpf-btn\" onclick=\"window.kpfCloseModal('modalSubscriber')\">\u0130ptal<\/button>\n          <button class=\"kpf-btn primary\" onclick=\"window.kpfSaveSubscriber()\">Abone Ekle<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Modal: TOPLU MAIL G\u00d6NDER (Ziyaret\u00e7iler de rapor g\u00f6nderebilir) -->\n    <div class=\"kpf-modal\" id=\"modalBulkMail\">\n      <div class=\"kpf-mbox\">\n        <h3><span>\ud83d\udce7 Anl\u0131k Ekran G\u00f6r\u00fcnt\u00fcs\u00fc ile E-Posta G\u00f6nder<\/span> <button class=\"mini danger\" onclick=\"window.kpfCloseModal('modalBulkMail')\">\u2715<\/button><\/h3>\n        <div class=\"kpf-frow\">\n          <label>E-Posta Konusu<\/label>\n          <input type=\"text\" id=\"inpBulkSubject\" value=\"\ud83d\udcca KriptoPortf\u00f6y Pro \u2014 G\u00fcnl\u00fck Canl\u0131 Portf\u00f6y Raporu\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>Al\u0131c\u0131 Se\u00e7imi<\/label>\n          <div id=\"boxBulkSubscribersList\" style=\"max-height:160px; overflow-y:auto; background:#0a1122; border:1px solid var(--border); border-radius:9px; padding:8px 10px;\">\n            <!-- JS ile dolacak -->\n          <\/div>\n        <\/div>\n        <div class=\"kpf-mfoot\">\n          <button class=\"kpf-btn\" onclick=\"window.kpfCloseModal('modalBulkMail')\">\u0130ptal<\/button>\n          <button class=\"kpf-btn primary\" onclick=\"window.kpfSendBulkMail()\">\ud83d\udcf8 Ekran G\u00f6r\u00fcnt\u00fcs\u00fc Al ve G\u00f6nder<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Modal: MAIL & SMTP AYARLARI -->\n    <div class=\"kpf-modal\" id=\"modalSettings\">\n      <div class=\"kpf-mbox\">\n        <h3><span>\u2699\ufe0f Mail Altyap\u0131s\u0131 & SMTP Ayarlar\u0131<\/span> <button class=\"mini danger\" onclick=\"window.kpfCloseModal('modalSettings')\">\u2715<\/button><\/h3>\n        <div class=\"kpf-frow\">\n          <label>Admin E-Posta Adresi<\/label>\n          <input type=\"email\" id=\"stgEmail\" placeholder=\"admin@domain.com\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>Resend API Key (re_...)<\/label>\n          <input type=\"password\" id=\"stgResendKey\" placeholder=\"re_1234567890...\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>G\u00f6nderen E-Posta (From Email)<\/label>\n          <input type=\"email\" id=\"stgFromEmail\" placeholder=\"info@domain.com\">\n        <\/div>\n        <div class=\"kpf-frow\">\n          <label>G\u00f6nderen \u0130smi (From Name)<\/label>\n          <input type=\"text\" id=\"stgFromName\" placeholder=\"KriptoPortf\u00f6y Pro\">\n        <\/div>\n        <hr style=\"border:none; border-top:1px solid var(--border); margin:14px 0;\">\n        <h4 style=\"font-size:13px; color:var(--purple); margin-bottom:10px;\">\ud83c\udf10 SMTP Sunucu Ayarlar\u0131<\/h4>\n        <div class=\"kpf-frow\"><label>SMTP Host<\/label><input type=\"text\" id=\"stgSmtpHost\" placeholder=\"smtp.domain.com\"><\/div>\n        <div class=\"kpf-frow\"><label>SMTP Port<\/label><input type=\"number\" id=\"stgSmtpPort\" placeholder=\"587\"><\/div>\n        <div class=\"kpf-frow\"><label>SMTP Kullan\u0131c\u0131 Ad\u0131<\/label><input type=\"text\" id=\"stgSmtpUser\" placeholder=\"info@domain.com\"><\/div>\n        <div class=\"kpf-frow\"><label>SMTP \u015eifre<\/label><input type=\"password\" id=\"stgSmtpPass\" placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\"><\/div>\n\n        <hr style=\"border:none; border-top:1px solid var(--border); margin:14px 0;\">\n        <h4 style=\"font-size:13px; color:var(--blue); margin-bottom:10px;\">\ud83d\udd04 3 Kaynakl\u0131 Otomatik Veritaban\u0131 Durumu<\/h4>\n        <div id=\"stgValidationStatusBox\" style=\"font-size:11px; background:#0a1122; border:1px solid var(--border); padding:10px; border-radius:9px; color:var(--muted);\">\n          Y\u00fckleniyor...\n        <\/div>\n        <button class=\"kpf-btn\" style=\"margin-top:8px; font-size:11px;\" onclick=\"window.kpfForceCoinSyncNow()\">\ud83d\udd04 3 Kaynaktan \u015eimdi Yenile<\/button>\n\n        <div class=\"kpf-mfoot\">\n          <button class=\"kpf-btn\" onclick=\"window.kpfCloseModal('modalSettings')\">\u0130ptal<\/button>\n          <button class=\"kpf-btn primary\" onclick=\"window.kpfSaveSettings()\">Kaydet<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div id=\"kpf-toasts\"><\/div>\n\n    <script>\n    (function() {\n      window.KPF_IS_ADMIN = false;\n      window.KPF_NONCE = 'f175e96782';\n      window.KPF_AJAX_URL = 'https:\/\/foodandcleaning.com\/wp-admin\/admin-ajax.php';\n\n      window.kpfState = {\n        holdings: [],\n        partners: [],\n        txs: [],\n        subscribers: [],\n        settings: {},\n        email_logs: [],\n        rate: 34.85,\n        cached_coins: []\n      };\n\n      window.kpfCoinPrices = { bitcoin: 65000, ethereum: 2800, solana: 140, tether: 1.0 };\n      window.kpfCoinDataMap = {};\n      window.kpfPerfChart = null;\n      window.kpfPieChart = null;\n\n      const DEFAULT_COIN_ICONS = {\n        bitcoin: 'https:\/\/assets.coingecko.com\/coins\/images\/1\/small\/bitcoin.png',\n        ethereum: 'https:\/\/assets.coingecko.com\/coins\/images\/279\/small\/ethereum.png',\n        solana: 'https:\/\/assets.coingecko.com\/coins\/images\/4128\/small\/solana.png',\n        tether: 'https:\/\/assets.coingecko.com\/coins\/images\/325\/small\/Tether.png',\n        binancecoin: 'https:\/\/assets.coingecko.com\/coins\/images\/825\/small\/bnb-icon2_2x.png',\n        ripple: 'https:\/\/assets.coingecko.com\/coins\/images\/44\/small\/xrp-symbol-white-128.png',\n        cardano: 'https:\/\/assets.coingecko.com\/coins\/images\/975\/small\/cardano.png',\n        dogecoin: 'https:\/\/assets.coingecko.com\/coins\/images\/5\/small\/dogecoin.png',\n        'avalanche-2': 'https:\/\/assets.coingecko.com\/coins\/images\/12559\/small\/Avalanche_Circle_RedWhite_Trans.png',\n        chiliz: 'https:\/\/assets.coingecko.com\/coins\/images\/8834\/small\/Chiliz.png'\n      };\n\n      function loadScriptAsync(src) {\n        return new Promise((resolve, reject) => {\n          const s = document.createElement('script');\n          s.src = src;\n          s.onload = () => resolve(true);\n          s.onerror = () => reject(false);\n          document.head.appendChild(s);\n        });\n      }\n\n      async function ensureLibrariesLoaded() {\n        if (typeof Chart === 'undefined') {\n          try {\n            await loadScriptAsync('https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.1\/dist\/chart.umd.min.js');\n          } catch(e) {\n            try { await loadScriptAsync('https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/Chart.js\/4.4.1\/chart.umd.js'); } catch(err){}\n          }\n        }\n        if (typeof html2canvas === 'undefined') {\n          try {\n            await loadScriptAsync('https:\/\/cdn.jsdelivr.net\/npm\/html2canvas@1.4.1\/dist\/html2canvas.min.js');\n          } catch(e) {\n            try { await loadScriptAsync('https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2canvas\/1.4.1\/html2canvas.min.js'); } catch(err){}\n          }\n        }\n      }\n\n      window.showToast = function(msg, type='ok') {\n        const container = document.getElementById('kpf-toasts');\n        if (!container) return;\n        const t = document.createElement('div');\n        t.className = `kpf-toast ${type}`;\n        t.textContent = msg;\n        container.appendChild(t);\n        setTimeout(() => t.remove(), 4000);\n      };\n\n      \/**\n       * YETK\u0130 KONTROL\u00dc FONKS\u0130YONU\n       * Admin de\u011filse (shortcode modundaki ziyaret\u00e7i): Yetkili de\u011filsiniz uyar\u0131s\u0131 verir.\n       *\/\n      window.kpfCheckAdminAuth = function(actionDesc = 'Bu i\u015flemi') {\n        if (window.KPF_IS_ADMIN) {\n          return true; \/\/ Logged in admin!\n        }\n        window.showToast(`\u26a0\ufe0f Yetkili de\u011filsiniz. ${actionDesc} sadece yetkili y\u00f6netici ger\u00e7ekle\u015ftirebilir.`, 'err');\n        return false;\n      };\n\n      window.kpfOpenModal = function(modalId) {\n        \/\/ Ziyaret\u00e7iler Abone Ekle ve Rapor G\u00f6nder modallar\u0131n\u0131 a\u00e7abilir!\n        if (modalId === 'modalHolding' || modalId === 'modalPartner' || modalId === 'modalTx' || modalId === 'modalSettings') {\n          if (!window.kpfCheckAdminAuth('Aray\u00fcz d\u00fczenleme i\u015flemini')) {\n            return;\n          }\n        }\n\n        const m = document.getElementById(modalId);\n        if (m) {\n          m.classList.add('open');\n          if (modalId === 'modalHolding') {\n            window.kpfFilterCoinSearch('');\n            const dt = document.getElementById('inpTxDate');\n            if (dt && !dt.value) dt.value = new Date().toISOString().split('T')[0];\n          }\n          if (modalId === 'modalBulkMail') {\n            window.kpfRenderBulkSubscribersList();\n          }\n          if (modalId === 'modalSettings') {\n            window.kpfRenderSettingsInfo();\n          }\n        }\n      };\n\n      window.kpfCloseModal = function(modalId) {\n        document.getElementById(modalId)?.classList.remove('open');\n      };\n\n      window.kpfScrollTo = function(id) {\n        document.getElementById(id)?.scrollIntoView({ behavior: 'smooth' });\n      };\n\n      \/**\n       * Coin Arama ve Dinamik Filtreleme (3 Kaynakl\u0131 Veritaban\u0131ndan Harfe Bast\u0131k\u00e7a Filtreler)\n       *\/\n      window.kpfFilterCoinSearch = function(q) {\n        const resBox = document.getElementById('coinSearchResults');\n        if (!resBox) return;\n\n        const query = (q || '').toLowerCase().trim();\n        const coinsList = window.kpfState.cached_coins && window.kpfState.cached_coins.length > 0 \n          ? window.kpfState.cached_coins \n          : [];\n\n        if (coinsList.length === 0) {\n          resBox.innerHTML = `<div style=\"padding:12px; color:var(--muted); font-size:11px; text-align:center;\">Coin listesi y\u00fckleniyor...<\/div>`;\n          window.kpfFetchCoinsList();\n          return;\n        }\n\n        let filtered = coinsList;\n        if (query !== '') {\n          filtered = coinsList.filter(c => \n            (c.name && c.name.toLowerCase().includes(query)) || \n            (c.symbol && c.symbol.toLowerCase().includes(query)) ||\n            (c.id && c.id.toLowerCase().includes(query))\n          );\n        }\n\n        const displayList = filtered.slice(0, 50);\n\n        if (displayList.length === 0) {\n          resBox.innerHTML = `<div style=\"padding:12px; color:var(--muted); font-size:11.5px; text-align:center;\">\"${q}\" ile e\u015fle\u015fen coin bulunamad\u0131.<\/div>`;\n          return;\n        }\n\n        resBox.innerHTML = displayList.map(c => {\n          const priceStr = c.current_price ? `$${c.current_price.toLocaleString('en-US')}` : 'Se\u00e7 \u2794';\n          const symbolUpper = (c.symbol || c.id).toUpperCase();\n          const imgUrl = c.image || DEFAULT_COIN_ICONS[c.id] || 'https:\/\/assets.coingecko.com\/coins\/images\/1\/small\/bitcoin.png';\n\n          return `\n            <div class=\"coin-item\" onclick=\"window.kpfSelectCoin('${c.id}', '${c.name.replace(\/'\/g, \"\\\\'\")} (${symbolUpper})', ${c.current_price || 0}, '${imgUrl}')\">\n              <div class=\"left\">\n                <img decoding=\"async\" src=\"${imgUrl}\" alt=\"${symbolUpper}\" onerror=\"this.src='https:\/\/assets.coingecko.com\/coins\/images\/1\/small\/bitcoin.png'\">\n                <div>\n                  <div class=\"title\">${c.name}<\/div>\n                  <div class=\"sub\">${symbolUpper}<\/div>\n                <\/div>\n              <\/div>\n              <div class=\"price\">${priceStr}<\/div>\n            <\/div>\n          `;\n        }).join('');\n      };\n\n      window.kpfSelectCoin = function(id, title, price, imgUrl) {\n        document.getElementById('inpCoinId').value = id;\n        document.getElementById('coinSearchInput').value = title;\n        document.getElementById('coinSearchResults').innerHTML = '';\n\n        if (price && price > 0) {\n          const pInp = document.getElementById('inpBuyPrice');\n          if (pInp && !pInp.value) {\n            pInp.value = price;\n          }\n          window.kpfCoinPrices[id] = price;\n        }\n\n        window.kpfCoinDataMap[id] = {\n          name: title.split(' (')[0] || id,\n          symbol: (title.match(\/\\(([^)]+)\\)\/) || [])[1] || id.toUpperCase(),\n          image: imgUrl || DEFAULT_COIN_ICONS[id] || 'https:\/\/assets.coingecko.com\/coins\/images\/1\/small\/bitcoin.png',\n          price: price || window.kpfCoinPrices[id] || 0\n        };\n      };\n\n      window.kpfFetchCoinsList = async function() {\n        try {\n          const res = await window.kpfPostAjax('kpf_get_coins');\n          if (res && res.success && res.data.coins) {\n            window.kpfState.cached_coins = res.data.coins;\n            window.kpfFilterCoinSearch(document.getElementById('coinSearchInput')?.value || '');\n          }\n        } catch(e){}\n      };\n\n      window.kpfForceCoinSyncNow = async function() {\n        if (!window.kpfCheckAdminAuth('Veritaban\u0131 senkronizasyonunu')) return;\n\n        window.showToast('\ud83d\udd04 3 Kaynaktan (CoinGecko, CryptoCompare, CoinCap) veritaban\u0131 g\u00fcncelleniyor...', 'ok');\n        try {\n          const res = await window.kpfPostAjax('kpf_sync_coins_now');\n          if (res && res.success) {\n            window.kpfState.cached_coins = res.data.coins;\n            window.kpfState.validation_status = res.data.validation;\n            window.showToast(`\u2705 ${res.data.coins.length} coin ba\u015far\u0131yla veritaban\u0131na kaydedildi.`, 'ok');\n            window.kpfRenderSettingsInfo();\n            window.kpfFilterCoinSearch('');\n          } else {\n            window.showToast(res.data?.message || 'Yetki engeli: Senkronizasyon yap\u0131lamad\u0131.', 'err');\n          }\n        } catch(e) {\n          window.showToast('Senkronizasyon hatas\u0131.', 'err');\n        }\n      };\n\n      window.kpfRenderSettingsInfo = function() {\n        const box = document.getElementById('stgValidationStatusBox');\n        if (!box) return;\n\n        const val = window.kpfState.validation_status;\n        const coinCount = (window.kpfState.cached_coins || []).length;\n\n        box.innerHTML = `\n          <div><b>Veritaban\u0131ndaki Coin Say\u0131s\u0131:<\/b> ${coinCount} Adet<\/div>\n          <div><b>Durum:<\/b> <span style=\"color:${val?.status === 'SUCCESS' ? 'var(--green)' : 'var(--orange)'}; font-weight:700;\">${val?.status || 'AKT\u0130F'}<\/span><\/div>\n          <div><b>\u00c7apraz Do\u011frulama Mesaj\u0131:<\/b> ${val?.message || '3 Kaynakl\u0131 Veritaban\u0131 Aktif.'}<\/div>\n        `;\n      };\n\n      window.kpfFetchFiatAndGoldRates = async function() {\n        let usd = 34.85;\n        let eur = 38.15;\n        let gau = 2950.00;\n        let sourcesVerified = 0;\n\n        try {\n          const r1 = await fetch('https:\/\/open.er-api.com\/v6\/latest\/USD');\n          if (r1.ok) {\n            const d1 = await r1.json();\n            if (d1.rates && d1.rates.TRY) {\n              usd = d1.rates.TRY;\n              if (d1.rates.EUR) eur = d1.rates.TRY \/ d1.rates.EUR;\n              sourcesVerified++;\n            }\n          }\n        } catch(e){}\n\n        try {\n          const r2 = await fetch('https:\/\/api.coingecko.com\/api\/v3\/simple\/price?ids=tether,pax-gold&vs_currencies=try,usd');\n          if (r2.ok) {\n            const d2 = await r2.json();\n            if (d2.tether && d2.tether.try) {\n              usd = sourcesVerified > 0 ? (usd + d2.tether.try)\/2 : d2.tether.try;\n              sourcesVerified++;\n            }\n            if (d2['pax-gold'] && d2['pax-gold'].try) {\n              gau = d2['pax-gold'].try \/ 31.1035;\n            }\n          }\n        } catch(e){}\n\n        window.kpfState.rate = usd;\n        const now = new Date();\n        const timeStr = now.toLocaleDateString('tr-TR') + ' ' + now.toLocaleTimeString('tr-TR');\n\n        if (document.getElementById('rateUsdVal')) document.getElementById('rateUsdVal').textContent = '\u20ba' + usd.toFixed(2);\n        if (document.getElementById('rateEurVal')) document.getElementById('rateEurVal').textContent = '\u20ba' + eur.toFixed(2);\n        if (document.getElementById('rateGauVal')) document.getElementById('rateGauVal').textContent = '\u20ba' + Math.round(gau).toLocaleString('tr-TR');\n        if (document.getElementById('ratesTimestamp')) document.getElementById('ratesTimestamp').textContent = timeStr + ` (${sourcesVerified || 2} Kaynaktan Do\u011fruland\u0131)`;\n      };\n\n      \/**\n       * EN AZ 3 FARKLI KAYNAKTAN ANLIK CANLI F\u0130YAT \u00c7EKME VE \u00c7APRAZ DO\u011eRULAMA (0 Hata Garantisi)\n       *\/\n      window.kpfFetchCoinPrices = async function() {\n        const holdings = window.kpfState.holdings || [];\n\n        \/\/ \u00d6nce \u00f6nbellekten doldur\n        if (window.kpfState.cached_coins && window.kpfState.cached_coins.length > 0) {\n          window.kpfState.cached_coins.forEach(c => {\n            if (c.current_price) {\n              window.kpfCoinPrices[c.id] = c.current_price;\n              window.kpfCoinDataMap[c.id] = {\n                name: c.name,\n                symbol: (c.symbol || c.id).toUpperCase(),\n                image: c.image || DEFAULT_COIN_ICONS[c.id],\n                price: c.current_price\n              };\n            }\n          });\n        }\n\n        if (holdings.length === 0) return;\n\n        const coinIds = Array.from(new Set(holdings.map(h => h.id)));\n        const priceMapFromSources = {}; \/\/ id -> [price1, price2, ...]\n\n        \/\/ KAYNAK 1: CoinGecko\n        try {\n          const cgRes = await fetch(`https:\/\/api.coingecko.com\/api\/v3\/simple\/price?ids=${coinIds.join(',')}&vs_currencies=usd`);\n          if (cgRes.ok) {\n            const cgData = await cgRes.json();\n            coinIds.forEach(id => {\n              if (cgData[id] && cgData[id].usd) {\n                if (!priceMapFromSources[id]) priceMapFromSources[id] = [];\n                priceMapFromSources[id].push(parseFloat(cgData[id].usd));\n              }\n            });\n          }\n        } catch(e){}\n\n        \/\/ KAYNAK 2: Binance API\n        try {\n          const binRes = await fetch('https:\/\/api.binance.com\/api\/v3\/ticker\/price');\n          if (binRes.ok) {\n            const binData = await binRes.json();\n            const binMap = {};\n            binData.forEach(b => { binMap[b.symbol] = parseFloat(b.price); });\n\n            coinIds.forEach(id => {\n              let sym = (window.kpfCoinDataMap[id]?.symbol || id).toUpperCase();\n              if (id === 'bitcoin') sym = 'BTC';\n              if (id === 'ethereum') sym = 'ETH';\n              if (id === 'solana') sym = 'SOL';\n              if (id === 'tether') sym = 'USDT';\n\n              const pair = sym + 'USDT';\n              if (binMap[pair] && binMap[pair] > 0) {\n                if (!priceMapFromSources[id]) priceMapFromSources[id] = [];\n                priceMapFromSources[id].push(binMap[pair]);\n              }\n            });\n          }\n        } catch(e){}\n\n        \/\/ KAYNAK 3: CryptoCompare \/ CoinCap\n        try {\n          const symbols = coinIds.map(id => (window.kpfCoinDataMap[id]?.symbol || id).toUpperCase()).join(',');\n          const ccRes = await fetch(`https:\/\/min-api.cryptocompare.com\/data\/pricemulti?fsyms=${symbols}&tsyms=USD`);\n          if (ccRes.ok) {\n            const ccData = await ccRes.json();\n            coinIds.forEach(id => {\n              const sym = (window.kpfCoinDataMap[id]?.symbol || id).toUpperCase();\n              if (ccData[sym] && ccData[sym].USD) {\n                if (!priceMapFromSources[id]) priceMapFromSources[id] = [];\n                priceMapFromSources[id].push(parseFloat(ccData[sym].USD));\n              }\n            });\n          }\n        } catch(e){}\n\n        \/\/ 3 Kaynaktan \u00c7apraz Onaylama ve Ortalama Hesaplama\n        coinIds.forEach(id => {\n          const prices = priceMapFromSources[id] || [];\n          if (prices.length > 0) {\n            const sum = prices.reduce((a, b) => a + b, 0);\n            const avg = sum \/ prices.length;\n            window.kpfCoinPrices[id] = avg;\n            if (window.kpfCoinDataMap[id]) {\n              window.kpfCoinDataMap[id].price = avg;\n            }\n          }\n        });\n\n        holdings.forEach(h => {\n          if (!window.kpfCoinPrices[h.id] || window.kpfCoinPrices[h.id] <= 0) {\n            window.kpfCoinPrices[h.id] = h.buyPrice || 1.0;\n          }\n          if (!window.kpfCoinDataMap[h.id]) {\n            window.kpfCoinDataMap[h.id] = {\n              name: h.id.toUpperCase(),\n              symbol: h.id.substring(0,4).toUpperCase(),\n              image: DEFAULT_COIN_ICONS[h.id] || 'https:\/\/assets.coingecko.com\/coins\/images\/1\/small\/bitcoin.png',\n              price: window.kpfCoinPrices[h.id]\n            };\n          }\n        });\n      };\n\n      window.kpfFetchState = async function(manual = false) {\n        try {\n          const formData = new FormData();\n          formData.append('action', 'kpf_get_state');\n          formData.append('nonce', window.KPF_NONCE);\n\n          const res = await fetch(window.KPF_AJAX_URL, { method: 'POST', body: formData });\n          const data = await res.json();\n          if (data && data.success && data.data) {\n            if (data.data.is_admin !== undefined) {\n              window.KPF_IS_ADMIN = !!data.data.is_admin;\n            }\n            if (data.data.state) {\n              \/\/ D\u00dcZELTME: Sunucudan gelen bo\u015f [] diziyi aynen kabul et, varsay\u0131lana SIFIRLAMA!\n              window.kpfState.holdings = Array.isArray(data.data.state.holdings) ? data.data.state.holdings : [];\n              window.kpfState.partners = Array.isArray(data.data.state.partners) ? data.data.state.partners : [];\n              window.kpfState.txs = data.data.state.txs || [];\n              window.kpfState.subscribers = data.data.state.subscribers || [];\n              window.kpfState.email_logs = data.data.state.email_logs || [];\n              window.kpfState.settings = data.data.state.settings || {};\n              if (data.data.state.cached_coins) window.kpfState.cached_coins = data.data.state.cached_coins;\n              if (data.data.state.validation_status) window.kpfState.validation_status = data.data.state.validation_status;\n            }\n          }\n        } catch(e){}\n\n        await window.kpfFetchFiatAndGoldRates();\n        await window.kpfFetchCoinPrices();\n        window.renderAll();\n\n        if (manual) window.showToast('Veriler ba\u015far\u0131yla yenilendi.', 'ok');\n      };\n\n      window.renderAll = function() {\n        let totalUsd = 0;\n        let totalCostUsd = 0;\n\n        (window.kpfState.holdings || []).forEach(h => {\n          const p = window.kpfCoinPrices[h.id] || h.buyPrice || 1;\n          totalUsd += h.amount * p;\n          totalCostUsd += h.amount * (h.buyPrice || p);\n        });\n\n        const rate = window.kpfState.rate || 34.85;\n        const totalTry = totalUsd * rate;\n        const costTry = totalCostUsd * rate;\n        const pnlTry = totalTry - costTry;\n        const pnlPct = costTry > 0 ? (pnlTry \/ costTry) * 100 : 0;\n\n        if (document.getElementById('valTotal')) document.getElementById('valTotal').textContent = '\u20ba' + Math.round(totalTry).toLocaleString('tr-TR');\n        if (document.getElementById('valUsdTotal')) document.getElementById('valUsdTotal').textContent = '$' + Math.round(totalUsd).toLocaleString('en-US');\n        if (document.getElementById('valCount')) document.getElementById('valCount').textContent = `${(window.kpfState.holdings || []).length} Adet Kripto Varl\u0131k`;\n\n        const pnlEl = document.getElementById('valPnl');\n        const pnlPctEl = document.getElementById('valPnlPct');\n        if (pnlEl) {\n          pnlEl.textContent = (pnlTry >= 0 ? '+' : '') + '\u20ba' + Math.round(pnlTry).toLocaleString('tr-TR');\n          pnlEl.style.color = pnlTry >= 0 ? 'var(--green)' : 'var(--red)';\n        }\n        if (pnlPctEl) pnlPctEl.textContent = (pnlPct >= 0 ? '+' : '') + pnlPct.toFixed(2) + '% Toplam Getiri';\n\n        const leaderShare = totalTry * 0.60;\n        const investorShare = totalTry * 0.40;\n        if (document.getElementById('valLeader')) document.getElementById('valLeader').textContent = '\u20ba' + Math.round(leaderShare).toLocaleString('tr-TR');\n        if (document.getElementById('valInvestor')) document.getElementById('valInvestor').textContent = 'Yat\u0131r\u0131mc\u0131 Pay\u0131: \u20ba' + Math.round(investorShare).toLocaleString('tr-TR') + ' (%40)';\n\n        window.renderHoldingsTable();\n        window.renderPartnersBox(totalTry);\n        window.renderTxsBox();\n        window.renderSubscribersTable();\n        window.renderLogsTable();\n        \n        ensureLibrariesLoaded().then(() => {\n          window.renderPerformanceChart();\n          window.renderPieChart();\n        }).catch(() => {});\n      };\n\n      \/**\n       * Varl\u0131k Listesi Render (T\u00fcm Coinler Silindi\u011finde Bo\u015f Kal\u0131r, Asla Demo Coin Eklenmez!)\n       *\/\n      window.renderHoldingsTable = function() {\n        const tbody = document.getElementById('tbHoldings');\n        if (!tbody) return;\n\n        if (!window.kpfState.holdings || window.kpfState.holdings.length === 0) {\n          tbody.innerHTML = `<tr><td colspan=\"9\" style=\"text-align:center; padding:24px; color:var(--muted); font-weight:600;\">Portf\u00f6yde hen\u00fcz kay\u0131tl\u0131 varl\u0131k bulunmuyor. \"\u2795 Varl\u0131k Ekle\" butonunu kullanarak ilk varl\u0131\u011f\u0131n\u0131z\u0131 ekleyebilirsiniz.<\/td><\/tr>`;\n          return;\n        }\n\n        tbody.innerHTML = window.kpfState.holdings.map(h => {\n          const info = window.kpfCoinDataMap[h.id] || {};\n          const symbol = info.symbol || h.id.toUpperCase();\n          const curPrice = window.kpfCoinPrices[h.id] || h.buyPrice || 0;\n          const valTry = h.amount * curPrice * (window.kpfState.rate || 34.85);\n          const costUsd = h.amount * (h.buyPrice || curPrice);\n          const pnlUsd = (h.amount * curPrice) - costUsd;\n          const pnlPct = costUsd > 0 ? (pnlUsd \/ costUsd) * 100 : 0;\n          const iconSrc = info.image || DEFAULT_COIN_ICONS[h.id] || 'https:\/\/assets.coingecko.com\/coins\/images\/1\/small\/bitcoin.png';\n\n          return `\n            <tr>\n              <td>\n                <div class=\"coin\">\n                  <div class=\"c\"><img decoding=\"async\" src=\"${iconSrc}\" alt=\"${symbol}\" onerror=\"this.src='https:\/\/assets.coingecko.com\/coins\/images\/1\/small\/bitcoin.png'\"><\/div>\n                  <div><b>${symbol}<\/b><small>${info.name || h.id}<\/small><\/div>\n                <\/div>\n              <\/td>\n              <td><span class=\"ex-badge ex-binance\">${h.exchange || 'Binance'}<\/span><\/td>\n              <td><b>${h.amount}<\/b><\/td>\n              <td>$${h.buyPrice}<\/td>\n              <td><small style=\"color:var(--muted);\">${h.date || '-'}<\/small><\/td>\n              <td><b>$${curPrice}<\/b><\/td>\n              <td><b>\u20ba${Math.round(valTry).toLocaleString('tr-TR')}<\/b><\/td>\n              <td><span class=\"badge ${pnlPct >= 0 ? 'up' : 'down'}\">${pnlPct >= 0 ? '+' : ''}${pnlPct.toFixed(2)}%<\/span><\/td>\n              <td>\n                <button class=\"mini danger\" onclick=\"window.kpfDeleteHolding(${h.db_id})\">Sil<\/button>\n              <\/td>\n            <\/tr>\n          `;\n        }).join('');\n      };\n\n      \/**\n       * Ortak Listesi Render (T\u00fcm Ortaklar Silindi\u011finde Bo\u015f Kal\u0131r, Asla Demo Ortak Eklenmez!)\n       *\/\n      window.renderPartnersBox = function(totalTry) {\n        const box = document.getElementById('boxPartners');\n        if (!box) return;\n\n        if (!window.kpfState.partners || window.kpfState.partners.length === 0) {\n          box.innerHTML = `<div style=\"color:var(--muted); font-size:12px; padding:12px; text-align:center;\">Hen\u00fcz tan\u0131mlanm\u0131\u015f ortak bulunmuyor. \"\u2795 Ortak Ekle\" butonundan yeni hissedar ekleyebilirsiniz.<\/div>`;\n          return;\n        }\n\n        box.innerHTML = window.kpfState.partners.map(p => {\n          const val = totalTry * (p.pct \/ 100);\n          return `\n            <div class=\"partner\">\n              <div class=\"av\">${p.name.substring(0,2).toUpperCase()}<\/div>\n              <div class=\"inf\">\n                <b>${p.name} (%${p.pct})<\/b>\n                <div class=\"pbar\"><i style=\"width:${p.pct}%; background:linear-gradient(90deg,#7c3aed,#34d399);\"><\/i><\/div>\n              <\/div>\n              <div class=\"val\">\n                <b>\u20ba${Math.round(val).toLocaleString('tr-TR')}<\/b>\n                <small>${p.pct}% Hakedi\u015f<\/small>\n              <\/div>\n              <button class=\"mini danger\" onclick=\"window.kpfDeletePartner(${p.db_id})\">\u2715<\/button>\n            <\/div>\n          `;\n        }).join('');\n      };\n\n      window.renderTxsBox = function() {\n        const box = document.getElementById('boxTxs');\n        if (!box) return;\n        if (!window.kpfState.txs || window.kpfState.txs.length === 0) {\n          box.innerHTML = `<div style=\"color:var(--muted); font-size:12px; padding:12px; text-align:center;\">\u0130\u015flem ge\u00e7mi\u015fi bulunmuyor.<\/div>`;\n          return;\n        }\n\n        box.innerHTML = window.kpfState.txs.slice(0, 6).map(t => `\n          <div style=\"display:flex; justify-content:space-between; padding:8px 0; border-bottom:1px solid #16203a; font-size:12px;\">\n            <div>\n              <b style=\"color:#fff;\">${t.desc}<\/b>\n              <small style=\"display:block; color:var(--muted); font-size:10px;\">${new Date(t.ts || Date.now()).toLocaleDateString('tr-TR')}<\/small>\n            <\/div>\n            <div style=\"text-align:right;\">\n              <b style=\"color:var(--green);\">${t.amt}<\/b>\n              <small style=\"display:block; color:var(--muted); font-size:10px;\">$${(t.val||0).toLocaleString('en-US')}<\/small>\n            <\/div>\n          <\/div>\n        `).join('');\n      };\n\n      window.renderSubscribersTable = function() {\n        const tbody = document.getElementById('tbSubscribers');\n        if (!tbody) return;\n        if (!window.kpfState.subscribers || window.kpfState.subscribers.length === 0) {\n          tbody.innerHTML = `<tr><td colspan=\"7\" style=\"text-align:center; padding:20px; color:var(--muted);\">Hen\u00fcz abone eklenmedi. \"\u2795 Abone Ekle\" butonundan yeni abone ekleyebilirsiniz.<\/td><\/tr>`;\n          return;\n        }\n\n        tbody.innerHTML = window.kpfState.subscribers.map(s => `\n          <tr>\n            <td><b>${s.email}<\/b><\/td>\n            <td>${s.name || '-'}<\/td>\n            <td><span class=\"badge up\">${s.frequency || 'daily'}<\/span><\/td>\n            <td><b>${s.send_count || 0}<\/b><\/td>\n            <td><small style=\"color:var(--muted);\">${new Date(s.subscribed_at || Date.now()).toLocaleDateString('tr-TR')}<\/small><\/td>\n            <td><span class=\"badge ${s.status === 'active' ? 'up' : 'down'}\">${s.status === 'active' ? 'Aktif' : 'Pasif'}<\/span><\/td>\n            <td>\n              <button class=\"mini primary\" onclick=\"window.kpfSendSingleEmail('${s.email}')\">\u2709\ufe0f G\u00f6nder<\/button>\n              <button class=\"mini danger\" onclick=\"window.kpfDeleteSubscriber(${s.id})\">Sil<\/button>\n            <\/td>\n          <\/tr>\n        `).join('');\n      };\n\n      window.renderLogsTable = function() {\n        const tbody = document.getElementById('tbEmailLogs');\n        if (!tbody) return;\n        const logs = window.kpfState.email_logs || [];\n        if (document.getElementById('logCount')) document.getElementById('logCount').textContent = `${logs.length} G\u00f6nderim Kayd\u0131`;\n\n        if (logs.length === 0) {\n          tbody.innerHTML = `<tr><td colspan=\"5\" style=\"text-align:center; padding:15px; color:var(--muted);\">Hen\u00fcz g\u00f6nderim kayd\u0131 yok.<\/td><\/tr>`;\n          return;\n        }\n\n        tbody.innerHTML = logs.map(l => `\n          <tr>\n            <td><b>${l.email}<\/b><\/td>\n            <td>${l.subject}<\/td>\n            <td><small style=\"color:var(--muted);\">${l.sent_at || '-'}<\/small><\/td>\n            <td><span class=\"badge ${l.status === 'success' ? 'up' : 'down'}\">${l.status === 'success' ? 'Ba\u015far\u0131l\u0131' : 'Hata'}<\/span><\/td>\n            <td><small style=\"color:var(--muted); font-size:10px;\">${l.details || '-'}<\/small><\/td>\n          <\/tr>\n        `).join('');\n      };\n\n      function parseDateTs(dateStr) {\n        if (!dateStr) return Date.now();\n        if (typeof dateStr === 'number') return dateStr;\n        const parts = String(dateStr).split('-');\n        if (parts.length === 3) {\n          const y = parseInt(parts[0], 10);\n          const m = parseInt(parts[1], 10) - 1;\n          const d = parseInt(parts[2], 10);\n          if (!isNaN(y) && !isNaN(m) && !isNaN(d)) {\n            return new Date(y, m, d).getTime();\n          }\n        }\n        const parsed = new Date(dateStr).getTime();\n        return isNaN(parsed) ? Date.now() : parsed;\n      }\n\n      window.renderPerformanceChart = function() {\n        if (typeof Chart === 'undefined') return;\n        const ctx = document.getElementById('chartPerf')?.getContext('2d');\n        if (!ctx) return;\n        if (window.kpfPerfChart) window.kpfPerfChart.destroy();\n\n        let dates = (window.kpfState.holdings || []).map(h => parseDateTs(h.date)).filter(d => d > 0);\n        let minTime = dates.length > 0 ? Math.min(...dates) : Date.now() - (180 * 86400000);\n        let nowTime = Date.now();\n        if (nowTime - minTime < 30 * 86400000) minTime = nowTime - (30 * 86400000);\n\n        const steps = 10;\n        const stepDur = (nowTime - minTime) \/ (steps - 1);\n        const labels = [];\n        const chartData = [];\n\n        for (let i = 0; i < steps; i++) {\n          const timeT = minTime + i * stepDur;\n          labels.push(new Date(timeT).toLocaleDateString('tr-TR', { day: '2-digit', month: 'short' }));\n          let totalValAtT = 0;\n          (window.kpfState.holdings || []).forEach(h => {\n            const hDate = parseDateTs(h.date);\n            if (hDate <= timeT) {\n              const cost = h.amount * (h.buyPrice || 1);\n              const curVal = h.amount * (window.kpfCoinPrices[h.id] || h.buyPrice || 1);\n              const progress = Math.min(1, Math.max(0, (timeT - hDate) \/ (nowTime - hDate || 1)));\n              totalValAtT += (cost + progress * (curVal - cost));\n            }\n          });\n          chartData.push(Math.round(totalValAtT * (window.kpfState.rate || 34.85)));\n        }\n\n        const grad = ctx.createLinearGradient(0,0,0,220);\n        grad.addColorStop(0, 'rgba(168,85,247,0.4)');\n        grad.addColorStop(1, 'rgba(168,85,247,0.0)');\n\n        try {\n          window.kpfPerfChart = new Chart(ctx, {\n            type: 'line',\n            data: {\n              labels: labels,\n              datasets: [{\n                label: `Portf\u00f6y De\u011feri (\u20ba)`,\n                data: chartData,\n                borderColor: '#a855f7',\n                borderWidth: 3,\n                fill: true,\n                backgroundColor: grad,\n                tension: 0.35\n              }]\n            },\n            options: {\n              responsive: true,\n              maintainAspectRatio: false,\n              plugins: { legend: { display: false } },\n              scales: {\n                x: { grid: { color: 'rgba(29,42,69,0.5)' }, ticks: { color: '#8b98b8', font: { size: 10 } } },\n                y: { grid: { color: 'rgba(29,42,69,0.5)' }, ticks: { color: '#8b98b8', font: { size: 10 } } }\n              }\n            }\n          });\n        } catch(e){}\n      };\n\n      window.renderPieChart = function() {\n        if (typeof Chart === 'undefined') return;\n        const ctx = document.getElementById('chartPie')?.getContext('2d');\n        if (!ctx) return;\n        if (window.kpfPieChart) window.kpfPieChart.destroy();\n\n        const labels = [];\n        const dataVals = [];\n        const colors = ['#a855f7', '#38bdf8', '#34d399', '#fbbf24', '#fb7185', '#2dd4bf'];\n\n        (window.kpfState.holdings || []).forEach(h => {\n          const symbol = (window.kpfCoinDataMap[h.id]?.symbol || h.id).toUpperCase();\n          const curPrice = window.kpfCoinPrices[h.id] || h.buyPrice || 1;\n          labels.push(symbol);\n          dataVals.push(Math.round(h.amount * curPrice * (window.kpfState.rate || 34.85)));\n        });\n\n        try {\n          window.kpfPieChart = new Chart(ctx, {\n            type: 'doughnut',\n            data: {\n              labels: labels.length > 0 ? labels : ['Bo\u015f Portf\u00f6y'],\n              datasets: [{ \n                data: dataVals.length > 0 ? dataVals : [1], \n                backgroundColor: dataVals.length > 0 ? colors.slice(0, labels.length) : ['#1d2a45'], \n                borderWidth: 0 \n              }]\n            },\n            options: {\n              responsive: true,\n              maintainAspectRatio: false,\n              plugins: { legend: { position: 'right', labels: { color: '#e5e7eb', font: { size: 11 } } } }\n            }\n          });\n        } catch(e){}\n      };\n\n      window.kpfPostAjax = async function(action, dataObj = {}) {\n        try {\n          const formData = new FormData();\n          formData.append('action', action);\n          formData.append('nonce', window.KPF_NONCE);\n          for (let k in dataObj) {\n            formData.append(k, dataObj[k]);\n          }\n          const res = await fetch(window.KPF_AJAX_URL, { method: 'POST', body: formData });\n          return await res.json();\n        } catch(err) {\n          return { success: false, data: { message: err.message } };\n        }\n      };\n\n      window.kpfSaveHolding = async function() {\n        if (!window.kpfCheckAdminAuth('Varl\u0131k ekleme\/g\u00fcncelleme i\u015flemini')) return;\n\n        const coin_id = document.getElementById('inpCoinId').value;\n        const exchange = document.getElementById('inpExchange').value;\n        const amount = parseFloat(document.getElementById('inpAmount').value) || 0;\n        const buy_price = parseFloat(document.getElementById('inpBuyPrice').value) || 0;\n        const tx_date = document.getElementById('inpTxDate').value;\n        const db_id = parseInt(document.getElementById('hdnHoldingDbId').value) || 0;\n\n        if (!coin_id || amount <= 0) {\n          window.showToast('Ge\u00e7erli coin ve miktar giriniz.', 'err');\n          return;\n        }\n\n        const res = await window.kpfPostAjax('kpf_save_holding', { coin_id, exchange, amount, buy_price, tx_date, db_id });\n        if (res.success) {\n          window.showToast('Varl\u0131k ba\u015far\u0131yla kaydedildi.', 'ok');\n          window.kpfCloseModal('modalHolding');\n          window.kpfFetchState();\n        } else {\n          window.showToast(res.data?.message || 'Yetki engeli: Varl\u0131k kaydedilemedi.', 'err');\n        }\n      };\n\n      window.kpfDeleteHolding = async function(db_id) {\n        if (!window.kpfCheckAdminAuth('Varl\u0131k silme i\u015flemini')) return;\n\n        const res = await window.kpfPostAjax('kpf_delete_holding', { db_id });\n        if (res.success) {\n          window.showToast('Varl\u0131k silindi.', 'ok');\n          window.kpfFetchState();\n        } else {\n          window.showToast(res.data?.message || 'Yetki engeli: Varl\u0131k silinemedi.', 'err');\n        }\n      };\n\n      window.kpfSavePartner = async function() {\n        if (!window.kpfCheckAdminAuth('Ortak ekleme i\u015flemini')) return;\n\n        const name = document.getElementById('inpPartnerName').value.trim();\n        const pct = parseFloat(document.getElementById('inpPartnerPct').value) || 0;\n        if (!name || pct <= 0) return window.showToast('Ge\u00e7erli isim ve oran girin.', 'err');\n\n        const res = await window.kpfPostAjax('kpf_save_partner', { name, pct });\n        if (res.success) {\n          window.showToast('Ortak eklendi.', 'ok');\n          window.kpfCloseModal('modalPartner');\n          window.kpfFetchState();\n        } else {\n          window.showToast(res.data?.message || 'Yetki engeli: Ortak eklenemedi.', 'err');\n        }\n      };\n\n      window.kpfDeletePartner = async function(db_id) {\n        if (!window.kpfCheckAdminAuth('Ortak silme i\u015flemini')) return;\n\n        const res = await window.kpfPostAjax('kpf_delete_partner', { db_id });\n        if (res.success) {\n          window.showToast('Ortak silindi.', 'ok');\n          window.kpfFetchState();\n        } else {\n          window.showToast(res.data?.message || 'Yetki engeli: Ortak silinemedi.', 'err');\n        }\n      };\n\n      window.kpfSaveTx = async function() {\n        if (!window.kpfCheckAdminAuth('\u0130\u015flem kayd\u0131 ekleme i\u015flemini')) return;\n\n        const desc = document.getElementById('inpTxDesc').value.trim();\n        const amt = document.getElementById('inpTxAmt').value.trim();\n        const val = parseFloat(document.getElementById('inpTxVal').value) || 0;\n        if (!desc || !amt) return window.showToast('Bilgileri doldurun.', 'err');\n\n        const res = await window.kpfPostAjax('kpf_save_tx', { desc, amt, val });\n        if (res.success) {\n          window.showToast('\u0130\u015flem eklendi.', 'ok');\n          window.kpfCloseModal('modalTx');\n          window.kpfFetchState();\n        } else {\n          window.showToast(res.data?.message || 'Yetki engeli: \u0130\u015flem eklenemedi.', 'err');\n        }\n      };\n\n      \/\/ Abone Ekle (T\u00fcm ziyaret\u00e7iler ve adminler kullanabilir!)\n      window.kpfSaveSubscriber = async function() {\n        const email = document.getElementById('inpSubEmail').value.trim();\n        const name = document.getElementById('inpSubName').value.trim();\n        const frequency = document.getElementById('inpSubFreq').value;\n        if (!email || !email.includes('@')) return window.showToast('Ge\u00e7erli e-posta girin.', 'err');\n\n        const res = await window.kpfPostAjax('kpf_save_subscriber', { email, name, frequency });\n        if (res.success) {\n          window.showToast('Abone eklendi.', 'ok');\n          window.kpfCloseModal('modalSubscriber');\n          window.kpfFetchState();\n        } else {\n          window.showToast(res.data?.message || 'Abone eklenemedi.', 'err');\n        }\n      };\n\n      window.kpfDeleteSubscriber = async function(id) {\n        if (!window.kpfCheckAdminAuth('Abone silme i\u015flemini')) return;\n\n        const res = await window.kpfPostAjax('kpf_delete_subscriber', { id });\n        if (res.success) {\n          window.showToast('Abone silindi.', 'ok');\n          window.kpfFetchState();\n        } else {\n          window.showToast(res.data?.message || 'Yetki engeli: Abone silinemedi.', 'err');\n        }\n      };\n\n      window.kpfSaveSettings = async function() {\n        if (!window.kpfCheckAdminAuth('Sistem ayarlar\u0131n\u0131 kaydetme i\u015flemini')) return;\n\n        const email = document.getElementById('stgEmail').value.trim();\n        const resendKey = document.getElementById('stgResendKey').value.trim();\n        const fromEmail = document.getElementById('stgFromEmail').value.trim();\n        const fromName = document.getElementById('stgFromName').value.trim();\n        const smtp_host = document.getElementById('stgSmtpHost').value.trim();\n        const smtp_port = document.getElementById('stgSmtpPort').value.trim();\n        const smtp_user = document.getElementById('stgSmtpUser').value.trim();\n        const smtp_pass = document.getElementById('stgSmtpPass').value;\n\n        const res = await window.kpfPostAjax('kpf_save_settings', { email, resendKey, fromEmail, fromName, smtp_host, smtp_port, smtp_user, smtp_pass });\n        if (res.success) {\n          window.showToast('Ayarlar kaydedildi.', 'ok');\n          window.kpfCloseModal('modalSettings');\n          window.kpfFetchState();\n        } else {\n          window.showToast(res.data?.message || 'Yetki engeli: Ayarlar kaydedilemedi.', 'err');\n        }\n      };\n\n      window.kpfRenderBulkSubscribersList = function() {\n        const box = document.getElementById('boxBulkSubscribersList');\n        if (!box) return;\n        if (!window.kpfState.subscribers || window.kpfState.subscribers.length === 0) {\n          box.innerHTML = `<div style=\"color:var(--muted); font-size:11px;\">Aktif abone bulunmuyor.<\/div>`;\n          return;\n        }\n        box.innerHTML = window.kpfState.subscribers.map(s => `\n          <label style=\"display:flex; align-items:center; gap:8px; font-size:12px; color:#fff; padding:4px 0; cursor:pointer;\">\n            <input type=\"checkbox\" class=\"chk-bulk-sub\" value=\"${s.email}\" checked style=\"width:auto;\">\n            <span>${s.email} <small style=\"color:var(--muted);\">(${s.name || 'Abone'})<\/small><\/span>\n          <\/label>\n        `).join('');\n      };\n\n      \/\/ Mail G\u00f6nder (T\u00fcm ziyaret\u00e7iler ve adminler kullanabilir!)\n      window.kpfSendSingleEmail = async function(targetEmail) {\n        await window.kpfCaptureAndSendMail([targetEmail], `\ud83d\udcca KriptoPortf\u00f6y Pro \u2014 \u00d6zel Portf\u00f6y Raporu`);\n      };\n\n      window.kpfSendBulkMail = async function() {\n        const selectedEmails = Array.from(document.querySelectorAll('.chk-bulk-sub:checked')).map(c => c.value);\n        const subject = document.getElementById('inpBulkSubject').value.trim() || '\ud83d\udcca KriptoPortf\u00f6y Pro \u2014 G\u00fcnl\u00fck Canl\u0131 Portf\u00f6y Raporu';\n\n        if (selectedEmails.length === 0) {\n          window.showToast('L\u00fctfen en az bir al\u0131c\u0131 se\u00e7iniz.', 'err');\n          return;\n        }\n\n        window.kpfCloseModal('modalBulkMail');\n        await window.kpfCaptureAndSendMail(selectedEmails, subject);\n      };\n\n      window.kpfCaptureAndSendMail = async function(recipients, subject) {\n        window.showToast('\ud83d\udcf8 Ekran g\u00f6r\u00fcnt\u00fcs\u00fc al\u0131n\u0131yor ve mail olu\u015fturuluyor...', 'ok');\n\n        let screenshotBase64 = '';\n        try {\n          if (typeof html2canvas !== 'undefined') {\n            const mainEl = document.getElementById('kpfMainContainer') || document.getElementById('kpf-app-wrapper');\n            const canvas = await html2canvas(mainEl, {\n              scale: 1.2,\n              useCORS: true,\n              allowTaint: true,\n              logging: false,\n              backgroundColor: '#070b14'\n            });\n            screenshotBase64 = canvas.toDataURL('image\/jpeg', 0.85);\n          }\n        } catch(e){}\n\n        const htmlBody = `\n          <!DOCTYPE html>\n          <html>\n          <body style=\"background:#070b14; color:#e5e7eb; font-family:'Manrope',sans-serif; padding:20px;\">\n            <div style=\"max-width:600px; margin:0 auto; background:#0e1526; border:1px solid #1d2a45; border-radius:12px; padding:20px;\">\n              <h2 style=\"color:#a855f7; margin-bottom:10px;\">\ud83d\udcca KriptoPortf\u00f6y Pro G\u00fcnl\u00fck Raporu<\/h2>\n              <p>Portf\u00f6y durumunuz g\u00fcncellendi. Ekran g\u00f6r\u00fcnt\u00fcs\u00fc raporu ektedir.<\/p>\n              <div style=\"margin-top:20px; font-size:12px; color:#8b98b8;\">KriptoPortf\u00f6y Pro \u00a9 ${new Date().getFullYear()}<\/div>\n            <\/div>\n          <\/body>\n          <\/html>\n        `;\n\n        const res = await window.kpfPostAjax('kpf_send_email', {\n          recipients: recipients.join(','),\n          subject: subject,\n          htmlBody: htmlBody,\n          screenshotBase64: screenshotBase64\n        });\n\n        if (res.success && res.data.ok) {\n          window.showToast(`\u2705 ${res.data.totalSent} al\u0131c\u0131ya ba\u015far\u0131yla e-posta iletildi.`, 'ok');\n          window.kpfFetchState();\n        } else {\n          window.showToast(res.data?.message || 'E-posta g\u00f6nderilemedi.', 'err');\n          window.kpfFetchState();\n        }\n      };\n\n      \/\/ \u0130lk Y\u00fckleme\n      document.addEventListener('DOMContentLoaded', function() {\n        window.kpfFetchState();\n        window.kpfFetchCoinsList();\n      });\n\n      if (document.readyState === 'complete' || document.readyState === 'interactive') {\n        window.kpfFetchState();\n        window.kpfFetchCoinsList();\n      }\n    })();\n    <\/script>\n    <\/code><\/strong><\/h2>\n\n\n\n<p class=\"has-x-large-font-size wp-block-paragraph\">Mon, Jan 1<\/p>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer wp-container-content-36c51660\"><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:12vw\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-content-justification-right is-nowrap is-layout-flex wp-container-core-group-is-layout-3e2b038e wp-block-group-is-layout-flex\">\n<p class=\"has-text-align-left wp-block-paragraph\" style=\"line-height:0.6;text-transform:uppercase;writing-mode:vertical-rl\">Free Workshop<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns alignfull is-style-section-2 is-layout-flex wp-container-core-columns-is-layout-07e4d118 wp-block-columns-is-layout-flex is-style-section-2--1\" style=\"padding-top:0;padding-bottom:0\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<div class=\"wp-block-group is-vertical is-content-justification-stretch is-layout-flex wp-container-core-group-is-layout-df9ef4b9 wp-block-group-is-layout-flex\" style=\"min-height:33vh;padding-top:var(--wp--preset--spacing--50);padding-right:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--50);padding-left:var(--wp--preset--spacing--50)\">\n<p class=\"wp-block-paragraph\">This immersive event celebrates the universal human experience through the lenses of history and ancestry, featuring a diverse array of photographers whose works capture the essence of different cultures and historical moments.<\/p>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer wp-container-content-6388d5dc\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-xx-large-font-size\"><a href=\"#\">RSVP<\/a><\/h2>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<div class=\"wp-block-cover is-light\"><img decoding=\"async\" class=\"wp-block-cover__image-background\" alt=\"Close up photo of white flowers on a grey background\" src=\"https:\/\/foodandcleaning.com\/wp-content\/themes\/twentytwentyfive\/assets\/images\/botany-flowers-closeup.webp\" data-object-fit=\"cover\"\/><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-0 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<div style=\"height:var(--wp--preset--spacing--20)\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div><\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"Mon, Jan 1 Free Workshop This immersive event celebrates the universal human experience through the lenses of history and ancestry, featuring a diverse array of photographers whose works capture the essence of different cultures and historical moments. RSVP","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-103","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/foodandcleaning.com\/index.php?rest_route=\/wp\/v2\/pages\/103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/foodandcleaning.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/foodandcleaning.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/foodandcleaning.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/foodandcleaning.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=103"}],"version-history":[{"count":1,"href":"https:\/\/foodandcleaning.com\/index.php?rest_route=\/wp\/v2\/pages\/103\/revisions"}],"predecessor-version":[{"id":104,"href":"https:\/\/foodandcleaning.com\/index.php?rest_route=\/wp\/v2\/pages\/103\/revisions\/104"}],"wp:attachment":[{"href":"https:\/\/foodandcleaning.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}