<!doctype html>
<html lang="tr" dir="ltr">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>eCyPro — KVKK + EU Regulatory Consulting</title>
    <meta
      name="description"
      content="eCyPro Premium Consulting — KVKK, GDPR ve AB regülasyon uyumu için stratejik danışmanlık. Veri yönetişimi, dijital dönüşüm ve kurumsal risk programları."
    />
    <meta
      name="keywords"
      content="Yönetim Danışmanlığı, Kurumsal Etkinlik, Dijital Pazarlama, Stratejik Planlama, İnsan Kaynakları"
    />
    <meta name="author" content="eCyPro Danışmanlık A.Ş." />
    <meta name="robots" content="index, follow" />
    <meta name="format-detection" content="telephone=no" />
    <!-- P46 C1: Statik canonical kaldırıldı — index.html'deki hardcoded
         canonical "/" tüm 80 URL'de ilk DOM tag olarak kalıyor ve
         querySelector + Google crawler bunu önce okuyor. Sonuç: site
         genelinde canonical homepage'i gösteriyor, alt sayfalar duplicate
         sayılıyor. SeoManager + per-page SEO component canonical'ı
         react-helmet-async ile route-aware yönetir. -->
    <!-- CSP is now served as an HTTP header via vercel.json so that the more
         powerful directives (frame-ancestors, report-uri, form-action) are
         honoured. The previous <meta> CSP could not enforce frame-ancestors
         and let `wss://*` through, which the launch QA flagged. Dev (vite)
         falls back to the dev server CSP — see vite.config.ts. -->
    <meta http-equiv="X-Content-Type-Options" content="nosniff" />
    <meta name="referrer" content="strict-origin-when-cross-origin" />

    <!-- P43: Google Search Console verification placeholder.
         Action item: Search Console → Property → "HTML tag" yöntemi → verification token kopyala → content="…" değerini override et. -->
    <meta name="google-site-verification" content="itFlxwaLZnnFsGkmNEAipjYzUEOk-6f39V4c-s2rRd8" />

    <!-- P97 — Google Tag Manager. Production container: GTM-NH7RJ9FB
         (Account: ecypro, Container: ecypro-web). GA4 measurement ID
         G-3Q4T3KL83V is mapped inside the GTM workspace (Tags → GA4
         Configuration → Measurement ID). KVKK note: GTM only fires
         marketing tags when the consent banner records 'granted'.

         Perf: the 115KB gtm.js download is deferred until the browser is
         idle (or the first user interaction) so it no longer competes with
         the app bundle for bandwidth/main-thread during the mobile LCP
         window. dataLayer is created synchronously and queues all pushes,
         so consent-mode defaults and route events set before gtm.js loads
         replay in order once the container boots. -->
    <script>
      (function (w, d, l, i) {
        w[l] = w[l] || [];
        w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
        var loaded = false;
        function load() {
          if (loaded) return;
          loaded = true;
          var dl = l != 'dataLayer' ? '&l=' + l : '';
          var j = d.createElement('script');
          j.async = true;
          j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
          d.head.appendChild(j);
        }
        var idle =
          w.requestIdleCallback || function (cb) { return w.setTimeout(cb, 1); };
        var events = ['pointerdown', 'keydown', 'scroll', 'touchstart'];
        function onInteract() {
          events.forEach(function (e) {
            w.removeEventListener(e, onInteract);
          });
          load();
        }
        events.forEach(function (e) {
          w.addEventListener(e, onInteract, { once: true, passive: true });
        });
        function schedule() {
          idle(load, { timeout: 4000 });
        }
        if (d.readyState === 'complete') schedule();
        else w.addEventListener('load', schedule);
      })(window, document, 'dataLayer', 'GTM-NH7RJ9FB');
    </script>

    <!-- Microsoft Clarity is now consent-gated via src/lib/clarity.ts + the
         AnalyticsProvider. The previous inline loader fired pre-consent (KVKK
         violation) and double-bootstrapped the SDK when the React loader ran
         later — the duplicate init was the console exception seen in QA.
         DNS prefetch hint stays below to keep the warm connection. -->
    <!-- clarity-inline-loader removed 2026-05-21 — see vercel.json CSP -->


    <!-- P15 — Statik hreflang tag'leri kaldırıldı. SeoManager (react-helmet-async)
         route-aware tek otorite olarak yönetir. Çift emit Google'da konfüzyon
         yaratıyordu (statik 5 + SeoManager 3 = 8 tag aynı route'ta).
         x-default ilk paint için korunur (Helmet hidrasyon öncesi). -->
    <link rel="alternate" hreflang="x-default" href="https://www.ecypro.com/" />

    <!-- No web-font preload on purpose. The above-fold App Shell h1 (the first
         paint / FCP element) renders in Georgia/system-ui, so Inter/Playfair are
         not first-paint fonts. The build does emit them at /fonts/*.woff2 (Vite
         keeps the @fontsource filenames), so the old preloads resolved — but
         pulling them at fetchpriority=high made them compete with the JS bundle
         for bandwidth during the mobile LCP window for no first-paint benefit.
         They now load lazily via the bundled @font-face under font-display:swap. -->

    <!-- P33-T06: Preconnect to analytics origins — DNS + TLS resolved before gtag fires -->
    <link rel="preconnect" href="https://www.googletagmanager.com" crossorigin />
    <link rel="preconnect" href="https://www.google-analytics.com" crossorigin />
    <link rel="dns-prefetch" href="https://www.googletagmanager.com" />
    <!-- P16 — 3rd-party preconnect tamamlama: Clarity tag + GrowthBook features
         CDN'i. dns-prefetch hafif fallback (preconnect kararı tarayıcıya bırakılır
         ki connection pool zorlanmasın). -->
    <link rel="dns-prefetch" href="https://www.clarity.ms" />
    <link rel="dns-prefetch" href="https://cdn.growthbook.io" />


    <!-- DNS prefetch for backend + CDN origins -->
    <link rel="dns-prefetch" href="https://api.ecypro.com" />
    <link rel="dns-prefetch" href="https://cdn.ecypro.com" />
    <link rel="preconnect" href="https://api.ecypro.com" crossorigin />

    <!-- PWA & Mobile -->
    <meta name="theme-color" content="#050810" media="(prefers-color-scheme: dark)" />
    <meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)" />
    <meta name="mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
    <meta name="apple-mobile-web-app-title" content="eCyPro" />
    <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
    <!-- P48: yeni eCyPro brand favicon — SVG modern tarayıcılarda primary,
         legacy .ico fallback. -->
    <link rel="icon" type="image/svg+xml" href="/brand/favicon.svg" />
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
    <link rel="icon" type="image/x-icon" href="/favicon.ico" />
    <link rel="manifest" href="/site.webmanifest" />

    <!-- Open Graph / Facebook -->
    <meta property="og:type" content="website" />
    <meta property="og:url" content="https://www.ecypro.com/" />
    <meta property="og:title" content="eCyPro | Premium Kurumsal Danışmanlık" />
    <meta
      property="og:description"
      content="Global ölçekte stratejik büyüme ve dijital dönüşüm ortağınız. Yönetim, etkinlik ve dijital çözümler."
    />
    <!-- P48: yeni branded OG share image — indigo/violet/gold palette. -->
    <meta property="og:image" content="https://www.ecypro.com/brand/og-share.svg" />
    <meta property="og:image:type" content="image/svg+xml" />
    <meta property="og:image:width" content="1200" />
    <meta property="og:image:height" content="630" />
    <meta property="og:image:alt" content="eCyPro Premium Consulting" />

    <!-- Twitter -->
    <meta property="twitter:card" content="summary_large_image" />
    <meta property="twitter:url" content="https://www.ecypro.com/" />
    <meta property="twitter:title" content="eCyPro | Premium Kurumsal Danışmanlık" />
    <meta
      property="twitter:description"
      content="Global ölçekte stratejik büyüme ve dijital dönüşüm ortağınız."
    />
    <meta property="twitter:image" content="https://www.ecypro.com/brand/og-share.svg" />
    <meta property="twitter:image:alt" content="eCyPro Premium Consulting" />

    <!-- P7 Round B: Structured Data moved to body-end below.
         Rationale: 4× JSON-LD blocks added ~4KB to <head> parse on Slow 4G
         (16-25ms per block on 4× CPU throttle). Schema.org crawlers (Google,
         Bing, Yandex) read body-end JSON-LD identically. Frees head parse
         budget for FCP.
         P43: 70e4761 merge conflict resolved — fake placeholder addr/phone
         JSON-LD discarded; SeoManager (react-helmet-async) is single
         source-of-truth for dynamic JSON-LD per route. -->
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": ["Organization", "ProfessionalService"],
      "@id": "https://www.ecypro.com/#organization",
      "name": "eCyPro Premium Consulting",
      "alternateName": "eCyverse · Premium Consulting",
      "url": "https://www.ecypro.com",
      "logo": "https://www.ecypro.com/pwa-512x512.png",
      "image": "https://www.ecypro.com/og-image.jpg",
      "description": "Premium kurumsal danışmanlık. Organizasyonel dönüşüm, stratejik danışmanlık ve kültür mühendisliği.",
      "email": "info@ecypro.com",
      "founder": {
        "@type": "Person",
        "name": "Emre Can Yalçın",
        "jobTitle": "Founder, Premium Consulting Strategist"
      },
      "contactPoint": [
        {
          "@type": "ContactPoint",
          "telephone": "+905417143000",
          "contactType": "customer service",
          "availableLanguage": ["Turkish", "English"],
          "areaServed": ["TR", "EU", "GB"]
        },
        {
          "@type": "ContactPoint",
          "email": "kvkk@ecypro.com",
          "contactType": "data protection officer",
          "availableLanguage": ["Turkish", "English"]
        }
      ],
      "areaServed": ["TR", "EU"]
    }
    </script>

    <!-- P33-T03: Non-blocking stylesheet — print media trick defers parse until after FCP.
         noscript fallback ensures CSS loads for bots/old browsers.
         NOTE: App Shell inline styles above-fold render before CSS parses. -->
    <link rel="stylesheet" href="/assets/index-ClaH5gP_.css" media="print" onload="this.media='all'" />
    <noscript></noscript>
    <!-- P20 — JS disabled fallback styles. SovereignBoundary + App Shell
         hero zaten inline CSS; bu blok sadece üst banner için. -->
    <noscript>
      <style>
        .ecy-noscript-banner {
          position: fixed;
          top: 0;
          left: 0;
          right: 0;
          z-index: 9999;
          background: #1e293b;
          color: #fff;
          padding: 12px 16px;
          font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
          font-size: 14px;
          line-height: 1.5;
          text-align: center;
          border-bottom: 1px solid rgba(255, 255, 255, 0.1);
        }
        .ecy-noscript-banner strong { color: #38bdf8; }
        .ecy-noscript-banner a {
          color: #38bdf8;
          text-decoration: underline;
        }
      </style>
    </noscript>
    <script type="module" crossorigin src="/assets/main-Dnd9UIUP.js"></script>
    <link rel="modulepreload" crossorigin href="/assets/i18n-Nc-UEv7Z.js">
    <link rel="modulepreload" crossorigin href="/assets/query-D_ue5HQz.js">
    <link rel="modulepreload" crossorigin href="/assets/vendor-9PYearIP.js">
    <link rel="modulepreload" crossorigin href="/assets/client-CWoG-kat.js">
    <link rel="modulepreload" crossorigin href="/assets/icons-DOcMlKMo.js">
    <link rel="modulepreload" crossorigin href="/assets/ui-B0HXGpir.js">
    <link rel="modulepreload" crossorigin href="/assets/motion-DKMGIEyy.js">
    <link rel="modulepreload" crossorigin href="/assets/ab-Bo84Ka7Y.js">
    <link rel="modulepreload" crossorigin href="/assets/utils-0l30as-N.js">
    <link rel="modulepreload" crossorigin href="/assets/monitoring-BbnS4oyn.js">
    <link rel="preload" as="style" href="/assets/main-ChIXpiQD.css" crossorigin onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/assets/main-ChIXpiQD.css" crossorigin></noscript>
  <link rel="manifest" href="/manifest.webmanifest"></head>
  <body class="bg-neutral text-slate-900 font-sans">
    <!-- P97 — GTM noscript fallback. Production container: GTM-NH7RJ9FB. -->
    <noscript
      ><iframe
        src="https://www.googletagmanager.com/ns.html?id=GTM-NH7RJ9FB"
        height="0"
        width="0"
        style="display: none; visibility: hidden"
        title="Google Tag Manager"
      ></iframe
    ></noscript>
    <!-- Skip to main content — W3Schools WCAG 2.1 accessibility pattern -->
    <a
      href="#main-content"
      class="sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50 focus:px-4 focus:py-2 focus:bg-blue-600 focus:text-white focus:rounded-lg focus:font-semibold"
      style="position:absolute;top:-999px;left:-999px;"
      onfocus="this.style.top='1rem';this.style.left='1rem';"
      onblur="this.style.top='-999px';this.style.left='-999px';"
    >Ana içeriğe geç / Skip to main content</a>
    <!-- P20 — JS devre dışı durum bildirimi: tam işlevsellik için JS gerekir.
         App Shell hero altta görünür kalır, kullanıcı /contact ve /services
         linklerine düz HTML olarak erişebilir. -->
    <noscript>
      <div class="ecy-noscript-banner" role="alert" aria-live="polite">
        <strong>JavaScript devre dışı / JavaScript is disabled.</strong>
        Tam etkileşim, form gönderimi ve panel için JavaScript'i etkinleştirin.
        For full interactivity, forms and the dashboard, please enable JavaScript.
        &mdash; <a href="mailto:info@ecypro.com">info@ecypro.com</a>
      </div>
    </noscript>
    <div id="root">
      <!-- App Shell: Inline pre-render for instant FCP/LCP — React replaces on mount -->
      <main
        id="main-content"
        role="main"
        aria-label="eCyPro Ana İçerik"
        style="
          min-height: 100vh;
          background: #050810;
          display: flex;
          align-items: center;
          justify-content: center;
          padding: 1.5rem;
          box-sizing: border-box;
        "
      >
        <div style="text-align: center; max-width: 900px; width: 100%">
          <div
            style="
              display: inline-flex;
              align-items: center;
              gap: 8px;
              border: 1px solid rgba(255, 255, 255, 0.12);
              border-radius: 9999px;
              padding: 6px 14px;
              margin-bottom: 1.75rem;
              color: #94a3b8;
              font-size: 0.8125rem;
              font-family: system-ui, sans-serif;
            "
          >
            &#9679;&nbsp;Premium Consulting &middot; eCyverse
          </div>
          <h1
            style="
              color: #fff;
              font-size: clamp(3rem, 5.5vw, 5.5rem);
              line-height: 1.05;
              margin: 0 0 1.5rem;
              font-weight: 700;
              font-family: Georgia, serif;
              letter-spacing: -0.02em;
            "
          >
            Vizyon. Strateji.<br />
            <span
              style="
                background: linear-gradient(135deg, #d4af37, #f6c453);
                -webkit-background-clip: text;
                -webkit-text-fill-color: transparent;
                background-clip: text;
              "
              >S&uuml;rd&uuml;r&uuml;lebilir</span
            ><br />
            Sonu&ccedil;.
          </h1>
          <p
            style="
              color: #94a3b8;
              font-size: 1.0625rem;
              line-height: 1.75;
              max-width: 580px;
              margin: 0 auto 2.5rem;
              font-family: system-ui, sans-serif;
            "
          >
            eCyverse ekosisteminin premium dan&#x131;&#x15F;manl&#x131;k kolu. Organizasyonel
            d&ouml;n&uuml;&#x15F;&uuml;m, stratejik dan&#x131;&#x15F;manl&#x131;k ve k&uuml;lt&uuml;r
            m&uuml;hendisli&#x11F;i ile lider organizasyonlar&#x131;n yan&#x131;nday&#x131;z.
          </p>
          <div style="display: flex; gap: 0.875rem; justify-content: center; flex-wrap: wrap">
            <a
              href="/contact"
              data-testid="hero-cta-primary"
              style="
                background: #2563eb;
                color: #fff;
                padding: 0.875rem 1.75rem;
                border-radius: 0.75rem;
                text-decoration: none;
                font-weight: 600;
                font-size: 0.9375rem;
                font-family: system-ui, sans-serif;
              "
              >&Uuml;cretsiz Strateji G&ouml;r&uuml;&#x15F;mesi Al &#8594;</a
            >
            <a
              href="/services"
              data-testid="hero-cta-secondary"
              style="
                border: 1px solid rgba(255, 255, 255, 0.18);
                color: #fff;
                padding: 0.875rem 1.75rem;
                border-radius: 0.75rem;
                text-decoration: none;
                font-weight: 600;
                font-size: 0.9375rem;
                font-family: system-ui, sans-serif;
              "
              >Hizmetleri Ke&#x15F;fedin</a
            >
          </div>
        </div>
      </main>
    </div>

    <!-- P7 Round B: Structured Data (schema.org) at body-end so head parse
         doesn't carry the ~4KB JSON-LD overhead on Slow 4G. Crawler-readable
         identically to head placement (Google JSON-LD docs: location-agnostic). -->
    <script type="application/ld+json">
      {
        "@context": "https://schema.org",
        "@type": "Organization",
        "@id": "https://www.ecypro.com/#organization",
        "name": "eCyPro Premium Consulting",
        "alternateName": "eCyPro",
        "url": "https://www.ecypro.com",
        "logo": "https://www.ecypro.com/pwa-512x512.png",
        "image": "https://www.ecypro.com/og-image.jpg",
        "email": "info@ecypro.com",
        "description": "Global standartlarda kurumsal yönetim danışmanlığı, etkinlik yönetimi ve dijital marka çözümleri.",
        "knowsLanguage": ["tr", "en"],
        "contactPoint": [
          {
            "@type": "ContactPoint",
            "email": "info@ecypro.com",
            "contactType": "customer support",
            "availableLanguage": ["Turkish", "English"],
            "areaServed": ["TR", "EU", "Worldwide"]
          }
        ]
      }
    </script>
    <script type="application/ld+json">
      {
        "@context": "https://schema.org",
        "@type": "WebSite",
        "@id": "https://www.ecypro.com/#website",
        "url": "https://www.ecypro.com",
        "name": "eCyPro | Stratejik Yönetim Danışmanlığı",
        "description": "eCyPro Premium Consulting — strategic management, event, and digital brand solutions.",
        "publisher": { "@id": "https://www.ecypro.com/#organization" },
        "inLanguage": ["tr-TR", "en-US"],
        "potentialAction": {
          "@type": "SearchAction",
          "target": "https://www.ecypro.com/search?q={search_term_string}",
          "query-input": "required name=search_term_string"
        }
      }
    </script>
    <script type="application/ld+json">
      {
        "@context": "https://schema.org",
        "@type": "BreadcrumbList",
        "@id": "https://www.ecypro.com/#breadcrumb",
        "itemListElement": [
          { "@type": "ListItem", "position": 1, "name": "Anasayfa", "item": "https://www.ecypro.com/" },
          { "@type": "ListItem", "position": 2, "name": "Hizmetler", "item": "https://www.ecypro.com/services" },
          { "@type": "ListItem", "position": 3, "name": "Blog", "item": "https://www.ecypro.com/blog" }
        ]
      }
    </script>
    <!-- P46 M4: Person schema (founder) — Knowledge Graph'a Emre Can Yalçın
         girişi sağlar, Organization → founder bağlantısını güçlendirir. -->
    <script type="application/ld+json">
      {
        "@context": "https://schema.org",
        "@type": "Person",
        "@id": "https://www.ecypro.com/#founder",
        "name": "Emre Can Yalçın",
        "givenName": "Emre Can",
        "familyName": "Yalçın",
        "jobTitle": "Founder & Chief Strategist",
        "description": "Founder of eCyPro Premium Consulting and the eCyverse ecosystem. Strategic management advisory, organizational transformation, and culture engineering practitioner.",
        "worksFor": { "@id": "https://www.ecypro.com/#organization" },
        "url": "https://www.ecypro.com/about",
        "knowsAbout": [
          "Strategic Management",
          "Organizational Transformation",
          "Culture Engineering",
          "M&A Advisory",
          "Operational Excellence",
          "Family Business Governance"
        ]
      }
    </script>
    <script type="application/ld+json">
      {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "@id": "https://www.ecypro.com/#faq",
        "mainEntity": [
          {
            "@type": "Question",
            "name": "eCyPro hangi hizmetleri sunar?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "eCyPro Premium Consulting; kurumsal yönetim danışmanlığı, etkinlik yönetimi ve dijital marka çözümleri sunar. Hizmet kapsamı her müşteri için ayrı düzenlenen sözleşmede tanımlanır."
            }
          },
          {
            "@type": "Question",
            "name": "Veri gizliliği KVKK ve GDPR'a uygun mu?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "Evet. Kişisel veriler 6698 sayılı KVKK ve GDPR çerçevesinde işlenir. Detaylı gizlilik politikası ve veri sahibi hakları için /privacy sayfasına bakınız."
            }
          },
          {
            "@type": "Question",
            "name": "İletişim için en hızlı yol nedir?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "info@ecypro.com adresine e-posta gönderebilir veya /contact sayfasındaki iletişim formunu kullanabilirsiniz. 24 saat içinde dönüş yapılır."
            }
          }
        ]
      }
    </script>
  </body>
</html>
