{"id":40920,"date":"2026-08-19T12:27:01","date_gmt":"2026-08-19T09:27:01","guid":{"rendered":"https:\/\/profelis.com.tr\/?page_id=40920"},"modified":"2026-08-24T16:35:43","modified_gmt":"2026-08-24T13:35:43","slug":"profelis-portfoy","status":"publish","type":"page","link":"https:\/\/profelis.com.tr\/en\/profelis-portfoy\/","title":{"rendered":"Profelis Portf\u00f6y"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"40920\" class=\"elementor elementor-40920\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-155c6d0 e-con-full e-flex e-con e-parent\" data-id=\"155c6d0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;pix_scale_in&quot;:&quot;none&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1e138f4 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"1e138f4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- PROFELIS ETKILESIMLI MIND MAP V25-1200PX-HIERARCHY-V8 \u2014 Elementor HTML bile\u015fenine tamam\u0131n\u0131 yap\u0131\u015ft\u0131r\u0131n. -->\n<style>\n  #prfl-mindmap-v25-hierarchy-v8, #prfl-mindmap-v25-hierarchy-v8 * { box-sizing:border-box; }\n  #prfl-mindmap-v25-hierarchy-v8 {\n    --ink:#15243b;\n    --muted:#66768e;\n    --line:#d9e2ee;\n    --products:#1689e8;\n    --services:#21a981;\n    --training:#e69519;\n    position:relative;\n    display:flex;\n    flex-direction:column;\n    width:min(1300px,calc(100vw - 32px));\n    height:clamp(460px,calc(100vh - 140px),980px);\n    max-width:none;\n    left:calc(50% - 50vw + max(16px,(100vw - 1300px)\/2));\n    margin:0;\n    overflow:hidden;\n    border:1px solid #dce5ef;\n    border-radius:24px;\n    color:var(--ink);\n    background:#f8fafc;\n    font-family:Arial,Helvetica,sans-serif;\n    box-shadow:0 18px 55px rgba(32,55,88,.12);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 button, #prfl-mindmap-v25-hierarchy-v8 a { font:inherit; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-head {\n    flex:0 0 auto;\n    display:flex;\n    align-items:center;\n    justify-content:space-between;\n    gap:20px;\n    padding:20px 24px;\n    border-bottom:1px solid #e2e8f0;\n    background:rgba(255,255,255,.92);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-head h2 { margin:0; color:#15243b; font-size:21px; line-height:1.25; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-head p { margin:5px 0 0; color:var(--muted); font-size:13px; line-height:1.45; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-reset {\n    flex:0 0 auto;\n    padding:9px 13px;\n    border:1px solid #cbd7e5;\n    border-radius:9px;\n    color:#29415f;\n    background:#fff;\n    cursor:pointer;\n    font-size:12px;\n    font-weight:700;\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-reset:hover,\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-reset:focus-visible { border-color:#7395bc; background:#f1f6fb; outline:none; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-stage {\n    position:relative;\n    width:100%;\n    height:100%;\n    min-height:0;\n    overflow:scroll;\n    background-color:#f8fafc;\n    background-image:radial-gradient(circle,#cfd9e7 1px,transparent 1px);\n    background-size:22px 22px;\n    overscroll-behavior:contain;\n    scrollbar-gutter:stable both-edges;\n    scrollbar-color:#8197b1 #e7edf4;\n    scrollbar-width:auto;\n    cursor:grab;\n    touch-action:none;\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-stage.is-panning { cursor:grabbing; user-select:none; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-stage-shell { position:relative; flex:1 1 auto; min-height:0; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-stage::-webkit-scrollbar { width:14px; height:14px; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-stage::-webkit-scrollbar-track { background:#e7edf4; box-shadow:inset 0 0 0 1px #d4dee9; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-stage::-webkit-scrollbar-thumb { border:3px solid #e7edf4; border-radius:999px; background:#8197b1; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-stage::-webkit-scrollbar-thumb:hover { background:#647d9b; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-stage::-webkit-scrollbar-corner { background:#e7edf4; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-canvas-wrap { position:relative; width:1200px; height:980px; margin:0 auto; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-canvas { position:relative; width:1200px; height:980px; min-height:980px; margin:0; transform-origin:0 0; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-links { position:absolute; inset:0; z-index:1; width:100%; height:100%; pointer-events:none; overflow:visible; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-link {\n    fill:none;\n    stroke:var(--branch,#9eb2c9);\n    stroke-width:3;\n    stroke-linecap:round;\n    opacity:.72;\n    filter:drop-shadow(0 1px 0 rgba(255,255,255,.95));\n    stroke-dasharray:900;\n    stroke-dashoffset:900;\n    animation:prfl-mm-draw .42s ease forwards;\n  }\n  @keyframes prfl-mm-draw { to { stroke-dashoffset:0; } }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-node {\n    position:absolute;\n    z-index:3;\n    display:flex;\n    align-items:center;\n    justify-content:center;\n    gap:7px;\n    min-width:0;\n    padding:8px 25px 8px 12px;\n    border:2px solid var(--branch,#8da4bd);\n    border-radius:14px;\n    color:#243955;\n    background:#fff;\n    box-shadow:0 7px 18px rgba(44,68,99,.11);\n    cursor:pointer;\n    text-align:center;\n    line-height:1.2;\n    transition:transform .18s ease,box-shadow .18s ease,background .18s ease;\n    animation:prfl-mm-pop .25s ease both;\n  }\n  @keyframes prfl-mm-pop { from { opacity:0; transform:scale(.86); } to { opacity:1; transform:scale(1); } }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-node:hover,\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-node:focus-visible {\n    z-index:5;\n    transform:translateY(-2px);\n    box-shadow:0 10px 25px rgba(44,68,99,.17);\n    outline:none;\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-node[aria-expanded=\"true\"] { background:color-mix(in srgb,var(--branch) 9%,#fff); }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-node.is-selected { box-shadow:0 0 0 3px color-mix(in srgb,var(--branch) 23%,transparent),0 10px 25px rgba(44,68,99,.18); }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-label { display:block; overflow:hidden; font-size:12px; font-weight:700; text-overflow:ellipsis; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-toggle {\n    position:absolute;\n    top:50%;\n    right:8px;\n    width:16px;\n    height:16px;\n    border-radius:50%;\n    color:#fff;\n    background:var(--branch,#8da4bd);\n    font-size:13px;\n    font-weight:700;\n    line-height:15px;\n    transform:translateY(-50%);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-count {\n    display:inline-flex;\n    align-items:center;\n    justify-content:center;\n    min-width:22px;\n    height:19px;\n    padding:0 5px;\n    border-radius:999px;\n    color:var(--branch);\n    background:color-mix(in srgb,var(--branch) 11%,#fff);\n    font-size:10px;\n    font-weight:800;\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-root {\n    border:0;\n    border-radius:50%;\n    padding:12px;\n    color:#fff;\n    background:#132d50;\n    box-shadow:0 12px 30px rgba(19,45,80,.25),inset 0 0 0 6px rgba(255,255,255,.08);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-root .prfl-mm-logo {\n    display:block;\n    width:142px;\n    max-width:88%;\n    height:auto;\n    pointer-events:none;\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-main { color:#fff; background:var(--branch); border-color:var(--branch); border-radius:999px; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-main[aria-expanded=\"true\"] { color:#fff; background:color-mix(in srgb,var(--branch) 86%,#10253e); }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-main .prfl-mm-count { color:var(--branch); background:#fff; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-main .prfl-mm-toggle { color:var(--branch); background:#fff; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-category {\n    border-color:var(--branch);\n    border-radius:12px;\n    color:#153858;\n    background:color-mix(in srgb,var(--branch) 78%,#fff);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-category[aria-expanded=\"true\"] {\n    color:#102f4c;\n    background:color-mix(in srgb,var(--branch) 84%,#fff);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-category .prfl-mm-count,\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-category .prfl-mm-toggle { color:var(--branch); background:#fff; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-subcategory {\n    border-color:color-mix(in srgb,var(--branch) 74%,#fff);\n    border-radius:11px;\n    color:#183b5d;\n    background:color-mix(in srgb,var(--branch) 45%,#fff);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-subcategory[aria-expanded=\"true\"] {\n    color:#102f4c;\n    background:color-mix(in srgb,var(--branch) 54%,#fff);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-subcategory .prfl-mm-toggle {\n    color:#fff;\n    background:color-mix(in srgb,var(--branch) 88%,#173a63);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-leaf {\n    padding-right:12px;\n    border-width:1px;\n    border-radius:11px;\n    background:color-mix(in srgb,var(--branch) 11%,#fff);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-leaf .prfl-mm-label {\n    display:-webkit-box;\n    overflow:hidden;\n    font-size:11px;\n    text-overflow:ellipsis;\n    -webkit-box-orient:vertical;\n    -webkit-line-clamp:2;\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-leaf::after {\n    content:\"\";\n    position:absolute;\n    right:-5px;\n    top:50%;\n    width:8px;\n    height:8px;\n    border:2px solid #fff;\n    border-radius:50%;\n    background:var(--branch);\n    transform:translateY(-50%);\n    box-shadow:0 0 0 1px var(--branch);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-detail {\n    position:absolute;\n    z-index:20;\n    left:0;\n    top:0;\n    width:min(410px,calc(100% - 30px));\n    padding:19px 20px;\n    border:1px solid #d6e0eb;\n    border-top:4px solid var(--branch,#173a63);\n    border-radius:16px;\n    background:rgba(255,255,255,.97);\n    box-shadow:0 22px 55px rgba(30,51,79,.24);\n    animation:prfl-mm-detail-in .22s ease both;\n  }\n  @keyframes prfl-mm-detail-in { from { opacity:0; transform:translateY(8px) scale(.98); } to { opacity:1; transform:translateY(0) scale(1); } }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-detail[hidden] { display:none; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-detail-close {\n    position:absolute;\n    top:10px;\n    right:11px;\n    width:28px;\n    height:28px;\n    border:0;\n    border-radius:50%;\n    color:#425776;\n    background:#edf2f7;\n    cursor:pointer;\n    font-size:18px;\n    line-height:1;\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-detail h3 { margin:0 35px 7px 0; color:#182b46; font-size:17px; line-height:1.3; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-detail p { margin:0; color:#5c6e86; font-size:13px; line-height:1.58; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-detail-actions { display:flex; flex-wrap:wrap; gap:8px; margin-top:14px; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-detail a {\n    display:inline-flex;\n    align-items:center;\n    min-height:34px;\n    padding:8px 12px;\n    border-radius:8px;\n    color:#fff;\n    background:var(--branch,#173a63);\n    font-size:11px;\n    font-weight:700;\n    text-decoration:none;\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-detail a:hover,\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-detail a:focus-visible { filter:brightness(.92); outline:none; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-detail a.is-brochure {\n    border:1px solid var(--branch,#173a63);\n    color:var(--branch,#173a63);\n    background:#fff;\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-zoom {\n    position:absolute;\n    z-index:35;\n    top:14px;\n    right:28px;\n    display:flex;\n    align-items:center;\n    gap:5px;\n    padding:5px;\n    border:1px solid #cbd7e5;\n    border-radius:11px;\n    background:rgba(255,255,255,.96);\n    box-shadow:0 8px 22px rgba(30,51,79,.16);\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-zoom button {\n    display:grid;\n    place-items:center;\n    width:32px;\n    height:30px;\n    padding:0;\n    border:0;\n    border-radius:7px;\n    color:#203b5a;\n    background:#edf3f8;\n    cursor:pointer;\n    font-size:20px;\n    font-weight:800;\n    line-height:1;\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-zoom button:hover,\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-zoom button:focus-visible { color:#fff; background:#46759f; outline:none; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-zoom button:disabled { cursor:default; opacity:.4; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-zoom-output { min-width:48px; color:#4f6680; font-size:11px; font-weight:800; text-align:center; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-legend {\n    flex:0 0 auto;\n    display:flex;\n    flex-wrap:wrap;\n    justify-content:center;\n    gap:14px;\n    padding:12px 20px 15px;\n    border-top:1px solid #e2e8f0;\n    color:#687990;\n    background:#fff;\n    font-size:11px;\n  }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-legend span { display:inline-flex; align-items:center; gap:6px; }\n  #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-legend i { width:9px; height:9px; border-radius:50%; background:var(--dot); }\n  @media (max-width:820px) {\n    #prfl-mindmap-v25-hierarchy-v8 { display:block; left:auto; width:100%; height:auto; min-height:0; margin:0; border-radius:16px; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-head { flex-direction:column; align-items:stretch; gap:10px; padding:16px 18px; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-head h2 { font-size:18px; line-height:1.3; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-head p { margin-top:4px; font-size:12px; line-height:1.5; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-reset { align-self:flex-start; padding:8px 11px; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-stage-shell { height:auto; min-height:650px; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-stage { height:auto; min-height:650px; overflow:hidden; scrollbar-gutter:auto; cursor:default; touch-action:pan-y pinch-zoom; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-canvas-wrap { width:100%; height:auto; min-height:650px; margin:0; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-canvas { width:100%; min-width:0; min-height:650px; margin:0; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-links { display:none; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-node { justify-content:flex-start; padding-left:14px; text-align:left; box-shadow:0 4px 12px rgba(44,68,99,.09); }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-label { font-size:13px; line-height:1.25; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-category,\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-subcategory,\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-leaf { border-left-width:4px; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-leaf .prfl-mm-label { font-size:12px; -webkit-line-clamp:2; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-root { justify-content:center; text-align:center; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-root .prfl-mm-logo { width:150px; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-main { justify-content:center; text-align:center; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-detail { width:calc(100% - 24px); max-width:520px; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-zoom { display:none; }\n    #prfl-mindmap-v25-hierarchy-v8 .prfl-mm-legend { display:none; }\n  }\n  @media (prefers-reduced-motion:reduce) {\n    #prfl-mindmap-v25-hierarchy-v8 *, #prfl-mindmap-v25-hierarchy-v8 *::before, #prfl-mindmap-v25-hierarchy-v8 *::after { animation:none !important; transition:none !important; }\n  }\n<\/style>\n\n<div id=\"prfl-mindmap-v25-hierarchy-v8\" data-layout-version=\"v25-1200px-hierarchy-v8\">\n  <header class=\"prfl-mm-head\">\n    <div>\n      <h2>Profelis \u00dcr\u00fcn ve Hizmet A\u011fac\u0131<\/h2>\n      <p>Dallar\u0131 a\u00e7mak i\u00e7in renkli ba\u015fl\u0131klara t\u0131klay\u0131n; bo\u015f alanda s\u00fcr\u00fckleyerek gezinin.<\/p>\n    <\/div>\n    <button class=\"prfl-mm-reset\" type=\"button\">Ba\u015fa D\u00f6n<\/button>\n  <\/header>\n  <div class=\"prfl-mm-stage-shell\">\n    <div class=\"prfl-mm-stage\" aria-label=\"Profelis etkile\u015fimli \u00fcr\u00fcn ve hizmet a\u011fac\u0131\">\n      <div class=\"prfl-mm-canvas-wrap\">\n        <div class=\"prfl-mm-canvas\">\n          <svg class=\"prfl-mm-links\" aria-hidden=\"true\"><\/svg>\n          <div class=\"prfl-mm-nodes\"><\/div>\n        <\/div>\n      <\/div>\n      <aside class=\"prfl-mm-detail\" hidden>\n        <button class=\"prfl-mm-detail-close\" type=\"button\" aria-label=\"Bilgi panelini kapat\">\u00d7<\/button>\n        <h3><\/h3>\n        <p><\/p>\n        <div class=\"prfl-mm-detail-actions\"><\/div>\n      <\/aside>\n    <\/div>\n    <div class=\"prfl-mm-zoom\" aria-label=\"Yak\u0131nla\u015ft\u0131rma kontrolleri\">\n      <button type=\"button\" data-zoom-direction=\"-1\" aria-label=\"Uzakla\u015ft\u0131r\">\u2212<\/button>\n      <output class=\"prfl-mm-zoom-output\" aria-live=\"polite\">100%<\/output>\n      <button type=\"button\" data-zoom-direction=\"1\" aria-label=\"Yak\u0131nla\u015ft\u0131r\">+<\/button>\n    <\/div>\n  <\/div>\n  <div class=\"prfl-mm-legend\" aria-hidden=\"true\">\n    <span><i style=\"--dot:#1689e8\"><\/i>\u00dcr\u00fcnler<\/span>\n    <span><i style=\"--dot:#21a981\"><\/i>Hizmetler<\/span>\n    <span><i style=\"--dot:#e69519\"><\/i>E\u011fitimler<\/span>\n  <\/div>\n<\/div>\n\n<script>\n(function () {\n  var DATA = {\"about\":{\"title\":\"Profelis Hakk\u0131nda\",\"description\":\"2007 y\u0131l\u0131ndan bu yana a\u00e7\u0131k kaynak teknolojileri oda\u011f\u0131nda; \u00fcr\u00fcn, dan\u0131\u015fmanl\u0131k, e\u011fitim ve destek hizmetleriyle g\u00fcvenli ve s\u00fcrd\u00fcr\u00fclebilir BT altyap\u0131lar\u0131 olu\u015fturuyoruz.\",\"links\":[[\"Kurumsal Bro\u015f\u00fcr\",\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35830\/1\/\"],[\"Referanslar\",\"https:\/\/profelis.com.tr\/referanslar\/\"],[\"\u0130\u015f Ortaklar\u0131\",\"https:\/\/profelis.com.tr\/is-ortaklarimiz\/\"],[\"Ba\u015far\u0131 Hikayeleri\",\"https:\/\/profelis.com.tr\/projeler\/\"]]},\"products\":[{\"title\":\"Mikroservis Mimari \u00c7\u00f6z\u00fcmleri\",\"subcategories\":[{\"title\":\"Konteyner Platformlar\u0131\",\"items\":[{\"title\":\"Docker\",\"description\":\"Uygulamalar\u0131n ba\u011f\u0131ms\u0131z ve ta\u015f\u0131nabilir konteynerler i\u00e7erisinde \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flayan modern uygulama platformudur.\",\"brochure\":\"\"}]},{\"title\":\"Kubernetes ve K\u00fcme Y\u00f6netimi\",\"items\":[{\"title\":\"Kubernetes\",\"description\":\"Konteyner tabanl\u0131 uygulamalar\u0131n \u00f6l\u00e7eklenebilir ve y\u00fcksek eri\u015filebilir \u015fekilde y\u00f6netilmesini sa\u011flayan orkestrasyon platformudur.\",\"brochure\":\"\"},{\"title\":\"Rancher\",\"description\":\"Kubernetes k\u00fcmelerinin merkezi olarak y\u00f6netilmesini ve operasyonlar\u0131n kolayla\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flayan platformdur.\",\"web\":\"https:\/\/profelis.com.tr\/rancher\/\",\"brochure\":\"\"},{\"title\":\"Platform9\",\"description\":\"Sanal makineler ve konteyner altyap\u0131lar\u0131n\u0131n merkezi olarak y\u00f6netilmesini sa\u011flayan kurumsal platformdur.\",\"web\":\"https:\/\/profelis.com.tr\/platform9\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_37518\/1\/\"}]}]},{\"title\":\"Kimlik, Eri\u015fim ve Parola \u00c7\u00f6z\u00fcmleri\",\"subcategories\":[{\"title\":\"Dizin ve Kimlik Y\u00f6netimi\",\"items\":[{\"title\":\"SambaBox\",\"description\":\"Merkezi kimlik do\u011frulama ve yetkilendirme ihtiya\u00e7lar\u0131 i\u00e7in geli\u015ftirilen, a\u00e7\u0131k kaynak tabanl\u0131 dizin hizmetleri \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.\",\"web\":\"https:\/\/sambabox.io\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35690\/1\/\"},{\"title\":\"One Identity\",\"description\":\"Kimlik ve eri\u015fim y\u00f6netimini merkezi hale getirerek kullan\u0131c\u0131 yetkilerinin g\u00fcvenli \u015fekilde y\u00f6netilmesini sa\u011flar.\",\"brochure\":\"\"}]},{\"title\":\"Parola Y\u00f6netimi\",\"items\":[{\"title\":\"PassBox\",\"description\":\"Kullan\u0131c\u0131lar\u0131n parolalar\u0131n\u0131 g\u00fcvenli bir \u015fekilde y\u00f6netmelerini ve kendi kendilerine s\u0131f\u0131rlayabilmelerini sa\u011flayan parola y\u00f6netim \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.\",\"web\":\"https:\/\/passbox.io\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35715\/1\/\"}]}]},{\"title\":\"G\u00fcvenlik \u00c7\u00f6z\u00fcmleri\",\"subcategories\":[{\"title\":\"Sertifika Y\u00f6netimi\",\"items\":[{\"title\":\"CertAutoPilot\",\"description\":\"Dijital sertifikalar\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc otomatikle\u015ftirerek sertifika y\u00f6netimini kolayla\u015ft\u0131ran ve g\u00fcvenli\u011fi art\u0131ran bir sertifika y\u00f6netim \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.\",\"web\":\"https:\/\/www.certautopilot.com\/\",\"brochure\":\"\"}]},{\"title\":\"API ve A\u011f G\u00fcvenli\u011fi\",\"items\":[{\"title\":\"Proxedo API Security\",\"description\":\"API trafi\u011fini koruyarak modern uygulamalar\u0131n g\u00fcvenli\u011fini g\u00fc\u00e7lendiren kapsaml\u0131 bir g\u00fcvenlik \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.\",\"web\":\"https:\/\/profelis.com.tr\/proxedo-api-security\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35838\/1\/\"},{\"title\":\"Proxedo Network Security\",\"description\":\"A\u011f trafi\u011fini analiz ederek kurumlar\u0131n g\u00fcvenlik risklerini azaltmalar\u0131na yard\u0131mc\u0131 olan g\u00fcvenlik platformudur.\",\"web\":\"https:\/\/profelis.com.tr\/proxedo-network-security\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35842\/1\/\"},{\"title\":\"OpenVPN\",\"description\":\"G\u00fcvenli uzaktan eri\u015fim sa\u011flayarak kullan\u0131c\u0131lar ile kurum a\u011flar\u0131 aras\u0131nda \u015fifreli ba\u011flant\u0131lar olu\u015fturur.\",\"web\":\"https:\/\/profelis.com.tr\/openvpn\/\",\"brochure\":\"\"}]},{\"title\":\"Uygulama ve Yaz\u0131l\u0131m G\u00fcvenli\u011fi\",\"items\":[{\"title\":\"Veracode\",\"description\":\"Yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n erken a\u015famada tespit edilmesini sa\u011flayan uygulama g\u00fcvenli\u011fi platformudur.\",\"web\":\"https:\/\/profelis.com.tr\/veracode\/\",\"brochure\":\"\"},{\"title\":\"Microfocus\",\"description\":\"Kurumsal BT ortamlar\u0131nda g\u00fcvenlik, y\u00f6netim ve modernizasyon ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131layan kapsaml\u0131 yaz\u0131l\u0131m \u00e7\u00f6z\u00fcmleri sunar.\",\"brochure\":\"\"}]}]},{\"title\":\"Veritaban\u0131 \u00c7\u00f6z\u00fcmleri\",\"subcategories\":[{\"title\":\"\u0130li\u015fkisel Veritabanlar\u0131\",\"items\":[{\"title\":\"PostgreSQL\",\"description\":\"Y\u00fcksek performans, g\u00fcvenilirlik ve esneklik sunan a\u00e7\u0131k kaynak ili\u015fkisel veritaban\u0131 sistemidir.\",\"brochure\":\"\"},{\"title\":\"EnterpriseDB\",\"description\":\"Kurumsal PostgreSQL ortamlar\u0131 i\u00e7in geli\u015fmi\u015f y\u00f6netim, y\u00fcksek eri\u015filebilirlik ve Oracle uyumlulu\u011fu sa\u011flayan \u00e7\u00f6z\u00fcmler sunar.\",\"web\":\"https:\/\/profelis.com.tr\/enterprisedb\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35878\/1\/\"},{\"title\":\"MariaDB\",\"description\":\"Kurumsal uygulamalar i\u00e7in performansl\u0131 ve g\u00fcvenilir a\u00e7\u0131k kaynak veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.\",\"web\":\"https:\/\/profelis.com.tr\/mariadb\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35882\/1\/\"}]},{\"title\":\"Da\u011f\u0131t\u0131k ve NoSQL Veritabanlar\u0131\",\"items\":[{\"title\":\"CockroachDB\",\"description\":\"Da\u011f\u0131t\u0131k mimariler i\u00e7in y\u00fcksek \u00f6l\u00e7eklenebilirlik ve kesintisiz \u00e7al\u0131\u015fabilirlik sa\u011flayan modern veritaban\u0131 platformudur.\",\"web\":\"https:\/\/profelis.com.tr\/cockroach-labs\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35810\/1\/\"},{\"title\":\"MongoDB\",\"description\":\"Esnek belge modeli ve yatay \u00f6l\u00e7eklenebilirlik sunan, modern uygulamalar i\u00e7in geli\u015ftirilmi\u015f NoSQL veritaban\u0131 platformudur.\",\"brochure\":\"\"}]},{\"title\":\"PostgreSQL Ara\u00e7lar\u0131 ve Uzmanl\u0131\u011f\u0131\",\"items\":[{\"title\":\"CYBERTEC\",\"description\":\"PostgreSQL altyap\u0131lar\u0131 i\u00e7in uzmanl\u0131k, performans optimizasyonu ve ileri seviye destek hizmetleri sunar.\",\"web\":\"https:\/\/profelis.com.tr\/cybertec-postgresql\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35820\/1\/\"},{\"title\":\"DBtune\",\"description\":\"Kurumsal uygulamalar i\u00e7in performansl\u0131 ve g\u00fcvenilir a\u00e7\u0131k kaynak veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.\",\"web\":\"https:\/\/profelis.com.tr\/dbtune\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_38360\/1\/\"},{\"title\":\"ClusterEye\",\"description\":\"PostgreSQL k\u00fcmelerinin sa\u011fl\u0131k durumunu ve performans\u0131n\u0131 s\u00fcrekli izleyerek kesintisiz operasyonlara katk\u0131 sa\u011flar.\",\"web\":\"https:\/\/www.clustereye.com\/tr\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_37953\/1\/\"}]},{\"title\":\"Veri Ge\u00e7i\u015fi ve Modernizasyon\",\"items\":[{\"title\":\"Ispirer\",\"description\":\"Veritaban\u0131 ve uygulama d\u00f6n\u00fc\u015f\u00fcm s\u00fcre\u00e7lerini otomatikle\u015ftirerek ge\u00e7i\u015f projelerini h\u0131zland\u0131ran bir migrasyon platformudur.\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_40346\/1\/\"}]},{\"title\":\"Veri Analiti\u011fi ve Arama\",\"items\":[{\"title\":\"Superset\",\"description\":\"Verilerin etkile\u015fimli panolar ve g\u00f6rselle\u015ftirmeler arac\u0131l\u0131\u011f\u0131yla analiz edilmesini sa\u011flayan a\u00e7\u0131k kaynak BI platformudur.\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_36409\/1\/\"},{\"title\":\"Elasticsearch\",\"description\":\"B\u00fcy\u00fck hacimli veriler \u00fczerinde h\u0131zl\u0131 arama, analiz ve g\u00f6zlemlenebilirlik sa\u011flayan da\u011f\u0131t\u0131k veri platformudur.\",\"brochure\":\"\"}]}]},{\"title\":\"Veri Koruma ve Depolama \u00c7\u00f6z\u00fcmleri\",\"subcategories\":[{\"title\":\"Yedekleme ve Kurtarma\",\"items\":[{\"title\":\"Storware\",\"description\":\"Sanal makineler, konteynerler, bulut i\u015f y\u00fckleri, uygulamalar ve u\u00e7 noktalar i\u00e7in merkezi yedekleme ve veri kurtarma platformudur.\",\"brochure\":\"\"}]},{\"title\":\"Y\u00fcksek Performansl\u0131 Depolama\",\"items\":[{\"title\":\"Lightbits\",\"description\":\"Bulut ve yapay zek\u00e2 i\u015f y\u00fckleri i\u00e7in y\u00fcksek performansl\u0131, yaz\u0131l\u0131m tan\u0131ml\u0131 ve \u00f6l\u00e7eklenebilir blok depolama \u00e7\u00f6z\u00fcmleri sunar.\",\"brochure\":\"\"}]}]},{\"title\":\"Eposta \u00c7\u00f6z\u00fcmleri\",\"subcategories\":[{\"title\":\"Kurumsal E-posta ve \u0130\u015fbirli\u011fi\",\"items\":[{\"title\":\"Zimbra Profelis Edition\",\"description\":\"Kurum i\u00e7i ileti\u015fimi g\u00fcvenli ve kesintisiz hale getiren kurumsal e-posta ve i\u015fbirli\u011fi platformudur.\",\"web\":\"https:\/\/profelis.com.tr\/zimbra-profelis-edition\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35739\/1\/\"}]}]},{\"title\":\"\u0130zleme \u00c7\u00f6z\u00fcmleri\",\"subcategories\":[{\"title\":\"Altyap\u0131 \u0130zleme\",\"items\":[{\"title\":\"Zabbix\",\"description\":\"Sistem, a\u011f ve uygulama bile\u015fenlerini ger\u00e7ek zamanl\u0131 olarak izleyerek olas\u0131 sorunlar\u0131n erken tespit edilmesini sa\u011flar.\",\"web\":\"https:\/\/profelis.com.tr\/zabbix\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_37292\/1\/\"}]},{\"title\":\"G\u00f6rselle\u015ftirme ve G\u00f6zlemlenebilirlik\",\"items\":[{\"title\":\"Grafana\",\"description\":\"Operasyonel verilerin g\u00f6rselle\u015ftirilmesini ve anlaml\u0131 panolar \u00fczerinden analiz edilmesini sa\u011flayan izleme platformudur.\",\"brochure\":\"\"},{\"title\":\"Elchi\",\"description\":\"API ve uygulama trafi\u011fine g\u00f6r\u00fcn\u00fcrl\u00fck kazand\u0131rarak performans ve g\u00fcvenlik analizlerini kolayla\u015ft\u0131ran g\u00f6zlemlenebilirlik \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.\",\"web\":\"https:\/\/www.elchi.io\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_37957\/1\/\"}]}]}],\"services\":[{\"title\":\"Linux \u0130stemci (Client) G\u00f6\u00e7\u00fc\",\"description\":\"Son kullan\u0131c\u0131 cihazlar\u0131n\u0131n Linux tabanl\u0131 ortamlara ta\u015f\u0131nmas\u0131n\u0131 sa\u011flayan u\u00e7tan uca ge\u00e7i\u015f hizmetidir.\",\"web\":\"https:\/\/profelis.com.tr\/linux-istemci-gocu-hizmeti\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_38323\/1\/\"},{\"title\":\"Linux Operasyon Merkezi\",\"description\":\"Linux sistemlerinin izlenmesi, bak\u0131m\u0131 ve s\u00fcreklili\u011finin sa\u011flanmas\u0131na y\u00f6nelik operasyon hizmetidir.\",\"web\":\"https:\/\/profelis.com.tr\/linux-operasyon-merkezi\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_37717\/1\/\"},{\"title\":\"Veritaban\u0131 Operasyon Merkezi\",\"description\":\"Kritik veritaban\u0131 altyap\u0131lar\u0131n\u0131n kesintisiz \u00e7al\u0131\u015fmas\u0131 i\u00e7in izleme, bak\u0131m ve destek hizmetleri sunar.\",\"web\":\"https:\/\/profelis.com.tr\/veritabani-operasyon-merkezi\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_37723\/1\/\"},{\"title\":\"Mikroservis Mimari Dan\u0131\u015fmanl\u0131\u011f\u0131\",\"description\":\"Modern uygulama mimarilerinin tasarlanmas\u0131 ve hayata ge\u00e7irilmesi i\u00e7in dan\u0131\u015fmanl\u0131k hizmeti sunar.\",\"web\":\"https:\/\/profelis.com.tr\/mikroservis-mimari-danismanligi\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35792\/1\/\"},{\"title\":\"Mikroservis Mimari G\u00fcvenli\u011fi Hizmeti\",\"description\":\"Mikroservis tabanl\u0131 uygulamalar\u0131n g\u00fcvenlik risklerini azaltmaya y\u00f6nelik \u00e7\u00f6z\u00fcmler sa\u011flar.\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35795\/1\/\"},{\"title\":\"A\u00e7\u0131k Kaynak G\u00f6\u00e7 Dan\u0131\u015fmanl\u0131\u011f\u0131\",\"description\":\"Kurumlar\u0131n a\u00e7\u0131k kaynak teknolojilerine ge\u00e7i\u015f s\u00fcre\u00e7lerini planl\u0131 ve g\u00fcvenli \u015fekilde y\u00f6netmelerine yard\u0131mc\u0131 olur.\",\"web\":\"https:\/\/profelis.com.tr\/acik-kaynak-goc\/\",\"brochure\":\"\"}],\"trainings\":[{\"title\":\"Linux E\u011fitimleri\",\"description\":\"Linux sistem y\u00f6netimi ve a\u00e7\u0131k kaynak teknolojileri konusunda uygulamal\u0131 bilgi kazand\u0131r\u0131r.\",\"web\":\"https:\/\/profelis.com.tr\/linux-egitimleri\/\",\"brochure\":\"\"},{\"title\":\"PostgreSQL E\u011fitimleri\",\"description\":\"PostgreSQL veritaban\u0131 y\u00f6netimi ve performans konular\u0131nda uzmanl\u0131k kazand\u0131ran e\u011fitimler sunar.\",\"web\":\"https:\/\/profelis.com.tr\/postgresql-egitimleri\/\",\"brochure\":\"\"},{\"title\":\"Kubernetes E\u011fitimi\",\"description\":\"Kubernetes platformunun kurulumu, y\u00f6netimi ve operasyonlar\u0131 konusunda uygulamal\u0131 e\u011fitimler sunar.\",\"web\":\"https:\/\/profelis.com.tr\/kubernetes-egitimi\/\",\"brochure\":\"\"},{\"title\":\"Zimbra OSE E\u011fitimi\",\"description\":\"Zimbra altyap\u0131s\u0131n\u0131n kurulumu, y\u00f6netimi ve bak\u0131m\u0131 konusunda teknik bilgi sa\u011flar.\",\"web\":\"https:\/\/profelis.com.tr\/zimbraose-egitimi\/\",\"brochure\":\"\"},{\"title\":\"Docker E\u011fitimi\",\"description\":\"Konteyner teknolojilerinin etkin kullan\u0131m\u0131 i\u00e7in temel ve ileri seviye yetkinlikler kazand\u0131r\u0131r.\",\"web\":\"https:\/\/profelis.com.tr\/docker-egitimi\/\",\"brochure\":\"https:\/\/profelis.com.tr\/kitaplik\/#flipbook-df_35846\/1\/\"}]};\n  var PROFELIS_LOGO_URL = \"https:\/\/profelis.com.tr\/wp-content\/uploads\/2024\/03\/profelis-logo-2.webp\";\n  var root = document.getElementById(\"prfl-mindmap-v25-hierarchy-v8\");\n  if (!root) return;\n  var stage = root.querySelector(\".prfl-mm-stage\");\n  var canvasWrap = root.querySelector(\".prfl-mm-canvas-wrap\");\n  var canvas = root.querySelector(\".prfl-mm-canvas\");\n  var nodeLayer = root.querySelector(\".prfl-mm-nodes\");\n  var svg = root.querySelector(\".prfl-mm-links\");\n  var detail = root.querySelector(\".prfl-mm-detail\");\n  var detailTitle = detail.querySelector(\"h3\");\n  var detailText = detail.querySelector(\"p\");\n  var detailActions = detail.querySelector(\".prfl-mm-detail-actions\");\n  var zoomOutput = root.querySelector(\".prfl-mm-zoom-output\");\n  var zoomButtons = root.querySelectorAll(\".prfl-mm-zoom button\");\n  var COLORS = { products:\"#1689e8\", services:\"#21a981\", trainings:\"#e69519\", root:\"#173a63\" };\n  var state = {\n    products:false,\n    services:false,\n    trainings:false,\n    categories:{},\n    subcategories:{},\n    selected:null\n  };\n  var zoom = 1;\n  var hasRendered = false;\n  var lastMobile = window.matchMedia(\"(max-width:820px)\").matches;\n  var panState = null;\n  var productTotal = DATA.products.reduce(function (sum, group) {\n    return sum + group.subcategories.reduce(function (groupSum, subcategory) {\n      return groupSum + subcategory.items.length;\n    }, 0);\n  }, 0);\n\n  function slug(value) {\n    return String(value).toLocaleLowerCase(\"tr-TR\").normalize(\"NFD\")\n      .replace(\/[\\u0300-\\u036f]\/g, \"\").replace(\/[^a-z0-9]+\/g, \"-\").replace(\/^-|-$\/g, \"\");\n  }\n\n  function node(id, parent, label, type, branch, data, expanded, count) {\n    return { id:id, parent:parent, label:label, type:type, branch:branch, data:data || null, expanded:expanded, count:count || 0 };\n  }\n\n  function visibleNodes() {\n    var nodes = [node(\"root\", null, \"\", \"root\", \"root\", DATA.about, false, 0)];\n    nodes.push(node(\"main-products\", \"root\", \"\u00dcr\u00fcnler\", \"main\", \"products\", null, state.products, productTotal));\n    nodes.push(node(\"main-services\", \"root\", \"Hizmetler\", \"main\", \"services\", null, state.services, DATA.services.length));\n    nodes.push(node(\"main-trainings\", \"root\", \"E\u011fitimler\", \"main\", \"trainings\", null, state.trainings, DATA.trainings.length));\n    if (state.products) {\n      DATA.products.forEach(function (group, index) {\n        var id = \"category-\" + index;\n        var categoryCount = group.subcategories.reduce(function (sum, subcategory) { return sum + subcategory.items.length; }, 0);\n        nodes.push(node(id, \"main-products\", group.title, \"category\", \"products\", group, Boolean(state.categories[id]), categoryCount));\n        if (state.categories[id]) {\n          group.subcategories.forEach(function (subcategory, subcategoryIndex) {\n            var subcategoryId = \"subcategory-\" + index + \"-\" + subcategoryIndex;\n            nodes.push(node(subcategoryId, id, subcategory.title, \"subcategory\", \"products\", subcategory, Boolean(state.subcategories[subcategoryId]), subcategory.items.length));\n            if (state.subcategories[subcategoryId]) {\n              subcategory.items.forEach(function (item, itemIndex) {\n                nodes.push(node(\"product-\" + index + \"-\" + subcategoryIndex + \"-\" + itemIndex, subcategoryId, item.title, \"leaf\", \"products\", item, false, 0));\n              });\n            }\n          });\n        }\n      });\n    }\n    if (state.services) {\n      DATA.services.forEach(function (item, index) {\n        nodes.push(node(\"service-\" + index, \"main-services\", item.title, \"leaf\", \"services\", item, false, 0));\n      });\n    }\n    if (state.trainings) {\n      DATA.trainings.forEach(function (item, index) {\n        nodes.push(node(\"training-\" + index, \"main-trainings\", item.title, \"leaf\", \"trainings\", item, false, 0));\n      });\n    }\n    return nodes;\n  }\n\n  function desktopLayout(nodes) {\n    var positions = {};\n    positions.root = { x:505, y:42, w:190, h:84 };\n    positions[\"main-products\"] = { x:100, y:205, w:180, h:54 };\n    positions[\"main-services\"] = { x:510, y:205, w:180, h:54 };\n    positions[\"main-trainings\"] = { x:920, y:205, w:180, h:54 };\n    var categories = nodes.filter(function (n) { return n.type === \"category\"; });\n\n    function placeExpandedCategory(category, startY) {\n      var categoryPosition = positions[category.id];\n      var firstColumnX = categoryPosition.x;\n      var secondColumnX = firstColumnX < 100 ? 210 : 15;\n      var subcategories = nodes.filter(function (n) { return n.parent === category.id && n.type === \"subcategory\"; });\n      var cursorY = startY;\n\n      for (var rowStart = 0; rowStart < subcategories.length; rowStart += 2) {\n        var row = subcategories.slice(rowStart, rowStart + 2);\n        row.forEach(function (n, columnIndex) {\n          positions[n.id] = {\n            x:columnIndex === 0 ? firstColumnX : secondColumnX,\n            y:cursorY,\n            w:180,\n            h:50\n          };\n        });\n        cursorY += 50;\n\n        row.filter(function (n) { return n.expanded; }).forEach(function (expandedSubcategory) {\n          var products = nodes.filter(function (n) { return n.parent === expandedSubcategory.id && n.type === \"leaf\"; });\n          if (!products.length) return;\n          cursorY += 12;\n          var productFirstX = positions[expandedSubcategory.id].x;\n          var productSecondX = productFirstX < 100 ? 210 : 15;\n          var productColumns = products.length === 1 ? 1 : 2;\n          products.forEach(function (n, index) {\n            positions[n.id] = {\n              x:index % productColumns === 0 ? productFirstX : productSecondX,\n              y:cursorY + Math.floor(index \/ productColumns) * 58,\n              w:180,\n              h:46\n            };\n          });\n          cursorY += Math.ceil(products.length \/ productColumns) * 58;\n        });\n        cursorY += 16;\n      }\n      return cursorY;\n    }\n\n    var categoryCursorY = 326;\n    for (var categoryRowStart = 0; categoryRowStart < categories.length; categoryRowStart += 2) {\n      var categoryRow = categories.slice(categoryRowStart, categoryRowStart + 2);\n      categoryRow.forEach(function (n, columnIndex) {\n        positions[n.id] = { x:columnIndex === 0 ? 15 : 210, y:categoryCursorY, w:180, h:56 };\n      });\n      var expandedCursorY = categoryCursorY + 70;\n      categoryRow.filter(function (n) { return n.expanded; }).forEach(function (expandedCategory) {\n        expandedCursorY = placeExpandedCategory(expandedCategory, expandedCursorY);\n      });\n      categoryCursorY = Math.max(categoryCursorY + 86, expandedCursorY + (categoryRow.some(function (n) { return n.expanded; }) ? 14 : 0));\n    }\n    function placeBranch(parentId, startX) {\n      var leaves = nodes.filter(function (n) { return n.parent === parentId; });\n      leaves.forEach(function (n, index) {\n        positions[n.id] = { x:startX + (index % 2) * 195, y:326 + Math.floor(index \/ 2) * 68, w:175, h:50 };\n      });\n    }\n    placeBranch(\"main-services\", 410);\n    placeBranch(\"main-trainings\", 810);\n    var maxBottom = Object.keys(positions).reduce(function (value, id) {\n      return Math.max(value, positions[id].y + positions[id].h);\n    }, 0);\n    var layoutHeight = Math.max(980, maxBottom + 100);\n    canvas.style.width = \"1200px\";\n    canvas.style.height = layoutHeight + \"px\";\n    canvas.dataset.layoutHeight = String(layoutHeight);\n    return positions;\n  }\n\n  function mobileLayout(nodes) {\n    var positions = {};\n    var width = Math.max(300, stage.clientWidth);\n    var y = 22;\n    function place(n, level) {\n      var x = level === 0 ? Math.max(12, (width - 210) \/ 2) : level === 1 ? 16 : 16 + level * 12;\n      var w = level === 0 ? 210 : Math.max(210, width - x - 16);\n      var h = level === 0 ? 74 : n.type === \"main\" ? 52 : n.type === \"category\" ? 54 : 50;\n      positions[n.id] = { x:x, y:y, w:w, h:h };\n      y += h + 12;\n    }\n    var byId = {};\n    nodes.forEach(function (n) { byId[n.id] = n; });\n    place(byId.root, 0);\n    function placeChildren(parentId, level) {\n      nodes.filter(function (n) { return n.parent === parentId; }).forEach(function (child) {\n        place(child, level);\n        placeChildren(child.id, level + 1);\n      });\n    }\n    [\"main-products\", \"main-services\", \"main-trainings\"].forEach(function (mainId) {\n      var main = byId[mainId];\n      place(main, 1);\n      placeChildren(mainId, 2);\n    });\n    canvas.style.width = \"100%\";\n    canvas.style.height = Math.max(650, y + 24) + \"px\";\n    return positions;\n  }\n\n  function makeNode(n, pos) {\n    var button = document.createElement(\"button\");\n    button._prflNode = n;\n    button.type = \"button\";\n    button.className = \"prfl-mm-node prfl-mm-\" + n.type + (state.selected === n.id ? \" is-selected\" : \"\");\n    button.dataset.id = n.id;\n    button.style.setProperty(\"--branch\", COLORS[n.branch]);\n    button.style.left = pos.x + \"px\";\n    button.style.top = pos.y + \"px\";\n    button.style.width = pos.w + \"px\";\n    button.style.height = pos.h + \"px\";\n    button.setAttribute(\"aria-expanded\", n.type === \"main\" || n.type === \"category\" || n.type === \"subcategory\" ? String(Boolean(n.expanded)) : \"false\");\n    if (n.type === \"root\") {\n      var logo = document.createElement(\"img\");\n      logo.className = \"prfl-mm-logo\";\n      logo.src = PROFELIS_LOGO_URL;\n      logo.alt = \"\";\n      logo.setAttribute(\"aria-hidden\", \"true\");\n      logo.decoding = \"async\";\n      button.setAttribute(\"aria-label\", \"Profelis hakk\u0131nda\");\n      button.appendChild(logo);\n    } else {\n      var label = document.createElement(\"span\");\n      label.className = \"prfl-mm-label\";\n      label.textContent = n.label;\n      button.appendChild(label);\n    }\n    if (n.count) {\n      var count = document.createElement(\"span\");\n      count.className = \"prfl-mm-count\";\n      count.textContent = n.count;\n      button.appendChild(count);\n    }\n    if (n.type === \"main\" || n.type === \"category\" || n.type === \"subcategory\") {\n      var toggle = document.createElement(\"span\");\n      toggle.className = \"prfl-mm-toggle\";\n      toggle.textContent = n.expanded ? \"\u2212\" : \"+\";\n      button.appendChild(toggle);\n    }\n    button.addEventListener(\"click\", function () { activate(button._prflNode); });\n    return button;\n  }\n\n  function updateNode(button, n, pos) {\n    button._prflNode = n;\n    button.className = \"prfl-mm-node prfl-mm-\" + n.type + (state.selected === n.id ? \" is-selected\" : \"\");\n    button.style.setProperty(\"--branch\", COLORS[n.branch]);\n    button.style.left = pos.x + \"px\";\n    button.style.top = pos.y + \"px\";\n    button.style.width = pos.w + \"px\";\n    button.style.height = pos.h + \"px\";\n    button.setAttribute(\"aria-expanded\", n.type === \"main\" || n.type === \"category\" || n.type === \"subcategory\" ? String(Boolean(n.expanded)) : \"false\");\n    var toggle = button.querySelector(\".prfl-mm-toggle\");\n    if (toggle) toggle.textContent = n.expanded ? \"\u2212\" : \"+\";\n  }\n\n  function linkPath(parent, child, mobile) {\n    if (mobile) {\n      var sx = parent.x + parent.w \/ 2;\n      var sy = parent.y + parent.h;\n      var ex = child.x;\n      var ey = child.y + child.h \/ 2;\n      var my = sy + Math.max(18, (ey - sy) * .5);\n      return \"M\" + sx + \" \" + sy + \" C\" + sx + \" \" + my + \" \" + (ex - 18) + \" \" + my + \" \" + (ex - 18) + \" \" + ey + \" L\" + ex + \" \" + ey;\n    }\n    var px = parent.x + parent.w \/ 2;\n    var py = parent.y + parent.h;\n    var cx = child.x + child.w \/ 2;\n    var cy = child.y;\n    var my = py + Math.max(34, (cy - py) * .52);\n    return \"M\" + px + \" \" + py + \" C\" + px + \" \" + my + \" \" + cx + \" \" + my + \" \" + cx + \" \" + cy;\n  }\n\n  function drawLinks(nodes, positions, mobile) {\n    var existing = {};\n    Array.prototype.forEach.call(svg.querySelectorAll(\".prfl-mm-link\"), function (path) {\n      existing[path.dataset.edge] = path;\n    });\n    if (mobile) {\n      Object.keys(existing).forEach(function (key) { existing[key].remove(); });\n      return;\n    }\n    svg.setAttribute(\"viewBox\", \"0 0 \" + canvas.offsetWidth + \" \" + canvas.offsetHeight);\n    var visibleEdges = {};\n    nodes.forEach(function (n) {\n      if (!n.parent || !positions[n.parent] || !positions[n.id]) return;\n      var edge = n.parent + \"--\" + n.id;\n      visibleEdges[edge] = true;\n      var path = existing[edge];\n      if (!path) {\n        path = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\", \"path\");\n        path.setAttribute(\"class\", \"prfl-mm-link\");\n        path.dataset.edge = edge;\n        svg.appendChild(path);\n      }\n      path.setAttribute(\"d\", linkPath(positions[n.parent], positions[n.id], mobile));\n      path.style.setProperty(\"--branch\", COLORS[n.branch]);\n    });\n    Object.keys(existing).forEach(function (edge) {\n      if (!visibleEdges[edge]) existing[edge].remove();\n    });\n  }\n\n  function centerShell() {\n    if (window.matchMedia(\"(max-width:820px)\").matches) {\n      root.style.transform = \"none\";\n      return;\n    }\n    root.style.transform = \"none\";\n    requestAnimationFrame(function () {\n      var rect = root.getBoundingClientRect();\n      var shift = window.innerWidth \/ 2 - (rect.left + rect.width \/ 2);\n      root.style.transform = \"translateX(\" + Math.round(shift) + \"px)\";\n    });\n  }\n\n  function applyZoom(preserveCenter) {\n    var mobile = window.matchMedia(\"(max-width:820px)\").matches;\n    if (mobile) {\n      canvas.style.transform = \"none\";\n      canvasWrap.style.width = \"100%\";\n      canvasWrap.style.height = canvas.style.height;\n      zoomOutput.textContent = \"100%\";\n      return;\n    }\n    var previous = Number(canvas.dataset.zoom || 1);\n    var centerX = (stage.scrollLeft + stage.clientWidth \/ 2) \/ previous;\n    var centerY = (stage.scrollTop + stage.clientHeight \/ 2) \/ previous;\n    canvas.dataset.zoom = String(zoom);\n    canvas.style.transform = \"scale(\" + zoom + \")\";\n    canvasWrap.style.width = Math.round(1200 * zoom) + \"px\";\n    var layoutHeight = Number(canvas.dataset.layoutHeight || 980);\n    canvasWrap.style.height = Math.round(layoutHeight * zoom) + \"px\";\n    zoomOutput.textContent = Math.round(zoom * 100) + \"%\";\n    Array.prototype.forEach.call(zoomButtons, function (button) {\n      var direction = Number(button.dataset.zoomDirection || 0);\n      button.disabled = direction < 0 ? zoom <= .7 : zoom >= 1.4;\n    });\n    if (preserveCenter) {\n      requestAnimationFrame(function () {\n        stage.scrollLeft = Math.max(0, centerX * zoom - stage.clientWidth \/ 2);\n        stage.scrollTop = Math.max(0, centerY * zoom - stage.clientHeight \/ 2);\n        if (!detail.hidden && detail.dataset.anchor) positionDetail(detail.dataset.anchor);\n      });\n    }\n  }\n\n  function render() {\n    var nodes = visibleNodes();\n    var mobile = window.matchMedia(\"(max-width:820px)\").matches;\n    var previousMobile = lastMobile;\n    var positions = mobile ? mobileLayout(nodes) : desktopLayout(nodes);\n    applyZoom(false);\n    var existing = {};\n    Array.prototype.forEach.call(nodeLayer.querySelectorAll(\".prfl-mm-node\"), function (button) {\n      existing[button.dataset.id] = button;\n    });\n    var visible = {};\n    nodes.forEach(function (n) {\n      visible[n.id] = true;\n      var button = existing[n.id];\n      if (button) updateNode(button, n, positions[n.id]);\n      else nodeLayer.appendChild(makeNode(n, positions[n.id]));\n    });\n    Object.keys(existing).forEach(function (id) {\n      if (!visible[id]) existing[id].remove();\n    });\n    requestAnimationFrame(function () { drawLinks(nodes, positions, mobile); });\n    if (mobile && (!hasRendered || !previousMobile)) {\n      stage.scrollLeft = 0;\n      stage.scrollTop = 0;\n    } else if (!mobile && (!hasRendered || previousMobile) && stage.scrollWidth > stage.clientWidth) {\n      stage.scrollLeft = (stage.scrollWidth - stage.clientWidth) \/ 2;\n    }\n    lastMobile = mobile;\n    hasRendered = true;\n    centerShell();\n  }\n\n  function activate(n) {\n    if (n.type === \"root\") {\n      state.selected = \"root\";\n      render();\n      showDetail(\"Profelis Hakk\u0131nda\", DATA.about.description, DATA.about.links, COLORS.root, n.id);\n    } else if (n.type === \"main\") {\n      var key = n.branch;\n      state[key] = !state[key];\n      state.selected = null;\n      hideDetail();\n      render();\n    } else if (n.type === \"category\") {\n      state.categories[n.id] = !state.categories[n.id];\n      state.selected = null;\n      hideDetail();\n      render();\n    } else if (n.type === \"subcategory\") {\n      state.subcategories[n.id] = !state.subcategories[n.id];\n      state.selected = null;\n      hideDetail();\n      render();\n    } else {\n      state.selected = n.id;\n      var links = n.data.web ? [[\"Web Sayfas\u0131na Git\", n.data.web]] : [];\n      if (n.data.brochure) links.push([\"Bro\u015f\u00fcr\u00fc \u0130ncele\", n.data.brochure]);\n      render();\n      showDetail(n.label, n.data.description || \"\", links, COLORS[n.branch], n.id);\n    }\n  }\n\n  function findNodeButton(id) {\n    return Array.prototype.find.call(nodeLayer.querySelectorAll(\".prfl-mm-node\"), function (button) {\n      return button.dataset.id === id;\n    });\n  }\n\n  function positionDetail(anchorId) {\n    var anchor = findNodeButton(anchorId);\n    if (!anchor || detail.hidden) return;\n    var stageRect = stage.getBoundingClientRect();\n    var anchorRect = anchor.getBoundingClientRect();\n    var anchorLeft = anchorRect.left - stageRect.left + stage.scrollLeft;\n    var anchorTop = anchorRect.top - stageRect.top + stage.scrollTop;\n    var visibleLeft = stage.scrollLeft;\n    var visibleRight = visibleLeft + stage.clientWidth;\n    var visibleTop = stage.scrollTop;\n    var visibleBottom = visibleTop + stage.clientHeight;\n    var panelWidth = detail.offsetWidth;\n    var panelHeight = detail.offsetHeight;\n    var left = anchorLeft + anchorRect.width \/ 2 - panelWidth \/ 2;\n    left = Math.max(visibleLeft + 12, Math.min(left, visibleRight - panelWidth - 12));\n    var top = anchorTop - panelHeight - 12;\n    if (top < visibleTop + 12) top = anchorTop + anchorRect.height + 12;\n    if (top + panelHeight > visibleBottom - 12) top = Math.max(visibleTop + 12, visibleBottom - panelHeight - 12);\n    detail.style.left = Math.round(left) + \"px\";\n    detail.style.top = Math.round(top) + \"px\";\n  }\n\n  function showDetail(title, text, links, color, anchorId) {\n    detail.style.setProperty(\"--branch\", color);\n    detailTitle.textContent = title;\n    detailText.textContent = text;\n    detailActions.replaceChildren();\n    (links || []).forEach(function (entry) {\n      var anchor = document.createElement(\"a\");\n      anchor.href = entry[1];\n      anchor.target = \"_blank\";\n      anchor.rel = \"noopener noreferrer\";\n      anchor.textContent = entry[0];\n      anchor.className = entry[0] === \"Bro\u015f\u00fcr\u00fc \u0130ncele\" ? \"is-brochure\" : \"is-web\";\n      anchor.addEventListener(\"click\", function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        var newTab = window.open(entry[1], \"_blank\");\n        if (newTab) {\n          try { newTab.opener = null; } catch (error) {}\n        }\n      });\n      detailActions.appendChild(anchor);\n    });\n    detail.hidden = false;\n    detail.dataset.anchor = anchorId;\n    requestAnimationFrame(function () { positionDetail(anchorId); });\n  }\n\n  function hideDetail() {\n    detail.hidden = true;\n    delete detail.dataset.anchor;\n    state.selected = null;\n  }\n\n  root.querySelector(\".prfl-mm-reset\").addEventListener(\"click\", function () {\n    state = { products:false, services:false, trainings:false, categories:{}, subcategories:{}, selected:null };\n    hideDetail();\n    render();\n  });\n  root.querySelector(\".prfl-mm-detail-close\").addEventListener(\"click\", function () { hideDetail(); render(); });\n  document.addEventListener(\"pointerdown\", function (event) {\n    if (detail.hidden) return;\n    if (event.target.closest(\".prfl-mm-detail,.prfl-mm-node,.prfl-mm-zoom,.prfl-mm-reset,a,button,input\")) return;\n    hideDetail();\n    render();\n  });\n  Array.prototype.forEach.call(zoomButtons, function (button) {\n    button.addEventListener(\"click\", function () {\n      var direction = Number(button.dataset.zoomDirection || 0);\n      zoom = Math.max(.7, Math.min(1.4, Math.round((zoom + direction * .1) * 10) \/ 10));\n      applyZoom(true);\n    });\n  });\n  stage.addEventListener(\"pointerdown\", function (event) {\n    if (event.button !== 0) return;\n    if (event.target.closest(\".prfl-mm-node,.prfl-mm-detail,.prfl-mm-zoom,a,button,input\")) return;\n    if (!detail.hidden) {\n      hideDetail();\n      render();\n    }\n    if (window.matchMedia(\"(max-width:820px)\").matches && event.pointerType === \"touch\") return;\n    panState = {\n      pointerId:event.pointerId,\n      startX:event.clientX,\n      startY:event.clientY,\n      scrollLeft:stage.scrollLeft,\n      scrollTop:stage.scrollTop\n    };\n    stage.classList.add(\"is-panning\");\n    stage.setPointerCapture(event.pointerId);\n    event.preventDefault();\n  });\n  stage.addEventListener(\"pointermove\", function (event) {\n    if (!panState || panState.pointerId !== event.pointerId) return;\n    stage.scrollLeft = panState.scrollLeft - (event.clientX - panState.startX);\n    stage.scrollTop = panState.scrollTop - (event.clientY - panState.startY);\n    event.preventDefault();\n  });\n  function finishPan(event) {\n    if (!panState || panState.pointerId !== event.pointerId) return;\n    try { stage.releasePointerCapture(event.pointerId); } catch (error) {}\n    panState = null;\n    stage.classList.remove(\"is-panning\");\n  }\n  stage.addEventListener(\"pointerup\", finishPan);\n  stage.addEventListener(\"pointercancel\", finishPan);\n  var resizeTimer;\n  window.addEventListener(\"resize\", function () {\n    clearTimeout(resizeTimer);\n    resizeTimer = setTimeout(function () {\n      render();\n      if (!detail.hidden && detail.dataset.anchor) requestAnimationFrame(function () { positionDetail(detail.dataset.anchor); });\n    }, 100);\n  });\n  render();\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Profelis \u00dcr\u00fcn ve Hizmet A\u011fac\u0131 Dallar\u0131 a\u00e7mak i\u00e7in renkli ba\u015fl\u0131klara t\u0131klay\u0131n; bo\u015f alanda s\u00fcr\u00fckleyerek gezinin. Ba\u015fa D\u00f6n \u00d7 \u2212 100% + \u00dcr\u00fcnler Hizmetler E\u011fitimler<\/p>","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-40920","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/pages\/40920","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/comments?post=40920"}],"version-history":[{"count":127,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/pages\/40920\/revisions"}],"predecessor-version":[{"id":41090,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/pages\/40920\/revisions\/41090"}],"wp:attachment":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/media?parent=40920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}