<!doctype html>
<html lang="tr" class="dark">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
  <title>Akademik Asistan | Öğrenci & Akademisyen Portalı</title>
  
  <!-- PWA Meta Tags -->
  <meta name="description" content="Yapay zeka destekli akademik yönetim platformu. Ders programı, sınavlar, notlar, ödevler ve daha fazlası." />
  <meta name="theme-color" content="#3b82f6" media="(prefers-color-scheme: light)" />
  <meta name="theme-color" content="#0f172a" media="(prefers-color-scheme: dark)" />
  <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="Akademik" />
  <meta name="mobile-web-app-capable" content="yes" />
  <meta name="application-name" content="Akademik Asistan" />
  <meta name="msapplication-TileColor" content="#3b82f6" />
  <meta name="msapplication-tap-highlight" content="no" />
  
  <!-- Open Graph / Social -->
  <meta property="og:type" content="website" />
  <meta property="og:title" content="Akademik Asistan" />
  <meta property="og:description" content="Yapay zeka destekli akademik yönetim platformu" />
  <meta property="og:site_name" content="Akademik Asistan" />
  <meta property="og:locale" content="tr_TR" />
  
  <!-- Twitter Card -->
  <meta name="twitter:card" content="summary_large_image" />
  <meta name="twitter:title" content="Akademik Asistan" />
  <meta name="twitter:description" content="Yapay zeka destekli akademik yönetim platformu" />
  
  <!-- Icons -->
  <link rel="icon" type="image/png" href="/assets/logo_final_v4-BlZ6wyfX.png" />
  <link rel="apple-touch-icon" href="/icon-192x192.png" />
  <link rel="apple-touch-icon" sizes="152x152" href="/icon-152x152.png" />
  <link rel="apple-touch-icon" sizes="180x180" href="/icon-192x192.png" />
  <link rel="apple-touch-icon" sizes="167x167" href="/icon-192x192.png" />
  
  <!-- PWA Manifest -->
  <link rel="manifest" href="/manifest.json" />
  
  <!-- DNS Prefetch for external resources -->
  <link rel="dns-prefetch" href="https://fonts.googleapis.com" />
  <link rel="dns-prefetch" href="https://fonts.gstatic.com" />
  
  <!-- Preconnect to Supabase for faster API calls -->
  <link rel="preconnect" href="https://egbjtfktnrrwfmkckkwz.supabase.co" crossorigin />
  
  <script>
    // Prevent theme flash on load
    (function () {
      var theme = localStorage.getItem('aa_web_theme');
      if (theme === 'light') {
        document.documentElement.classList.remove('dark');
        document.body && document.body.classList.add('theme-light');
      }
    })();
  </script>
  <style>
    /* Prevent FOUC (Flash of Unstyled Content) and white screen */
    html,
    body,
    #root {
      margin: 0;
      padding: 0;
      min-height: 100vh;
    }

    html.dark body,
    html.dark #root {
      background: #050507;
    }

    html:not(.dark) body,
    html:not(.dark) #root {
      background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 50%, #e2e8f0 100%);
      background-attachment: fixed;
    }
  </style>
  <script type="module" crossorigin src="/assets/index-Bo4oPwPh.js"></script>
  <link rel="modulepreload" crossorigin href="/assets/vendor-crypto-EjAD9tfc.js">
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-D728y6h6.js">
  <link rel="modulepreload" crossorigin href="/assets/vendor-jspdf-DPDmRmZK.js">
  <link rel="modulepreload" crossorigin href="/assets/vendor-motion-DTPpuzIP.js">
  <link rel="modulepreload" crossorigin href="/assets/vendor-supabase-YK7D83Jm.js">
  <link rel="modulepreload" crossorigin href="/assets/vendor-icons-CXeF4U26.js">
  <link rel="modulepreload" crossorigin href="/assets/vendor-router-Bh0nnI3E.js">
  <link rel="modulepreload" crossorigin href="/assets/vendor-utils-DZmF7-vO.js">
  <link rel="stylesheet" crossorigin href="/assets/index-D_eWzuJT.css">
</head>

<body>
  <div id="root"></div>
  
  <!-- Service Worker Registration -->
  <script>
    (function () {
      if (!('serviceWorker' in navigator)) return;

      var isLocalhost = ['localhost', '127.0.0.1', '0.0.0.0'].includes(window.location.hostname);
      if (isLocalhost) {
        // Unregister all SWs on localhost so dev is never blocked
        navigator.serviceWorker.getRegistrations().then(function (regs) {
          regs.forEach(function (r) { r.unregister(); });
        });
        return;
      }

      // ── 1. PROACTIVELY DELETE ALL OLD CACHES ──────────────────────────────
      // Inline scripts run even when an old SW is serving a cached index.html,
      // because SWs cannot intercept their own host page's inline scripts.
      // This clears stale v1.0.x / v1.1.x / v1.2.x Cache Storage entries.
      if ('caches' in window) {
        caches.keys().then(function (keys) {
          keys.forEach(function (key) {
            if (
              key.startsWith('akademik-') &&
              !key.startsWith('akademik-static-v1.4') &&
              !key.startsWith('akademik-dynamic-v1.4') &&
              !key.startsWith('akademik-api-v1.4')
            ) {
              caches.delete(key);
            }
          });
        });
      }

      // ── 2. CONTROLLERCHANGE → RELOAD ──────────────────────────────────────
      // The old code used sessionStorage to prevent double-reloads.
      // On mobile, background tabs can keep sessionStorage alive for WEEKS,
      // so once the key was set by an earlier update attempt the reload would
      // never fire again. Replace the guard with a simple in-memory debounce
      // (safe: after reload the new SW is already active → no further event).
      var reloadPending = false;
      navigator.serviceWorker.addEventListener('controllerchange', function () {
        if (reloadPending) return;
        reloadPending = true;
        window.location.reload();
      });

      // ── 3. REGISTER AND FORCE-UPDATE SW ───────────────────────────────────
      window.addEventListener('load', function () {
        navigator.serviceWorker.register('/sw.js', { scope: '/', updateViaCache: 'none' })
          .then(function (reg) {
            // Immediately check for a newer sw.js on the server
            reg.update().catch(function () {});

            // If a new SW is already waiting (stuck from a previous visit), activate it now
            if (reg.waiting) {
              reg.waiting.postMessage({ type: 'SKIP_WAITING' });
            }

            // Also watch for updates found during this session
            reg.addEventListener('updatefound', function () {
              var newWorker = reg.installing;
              if (!newWorker) return;
              newWorker.addEventListener('statechange', function () {
                if (newWorker.state === 'installed' && reg.waiting) {
                  reg.waiting.postMessage({ type: 'SKIP_WAITING' });
                }
              });
            });
          })
          .catch(function (err) {
            console.warn('[PWA] SW registration failed:', err);
          });
      });
    })();
  </script>
<!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "70d18e9e70f1409197d8ea649f92fb0b"}'></script><!-- Cloudflare Pages Analytics --></body>

</html>
