<?php
// IA_STEP1_BUILD_20260723_OWNER_DUPLICATE_AND_RESET_V5
// IA_STEP1_MOBIL_FORM_DUZELTILDI_V4_20260711
declare(strict_types=1);
session_start();

/*
 |--------------------------------------------------------------------------
 | SAHİP / YÖNETİCİ SINIRSIZ TEST ERİŞİMİ
 |--------------------------------------------------------------------------
 | Gizli bağlantı doğru anahtarla açıldığında bu tarayıcıya 1 yıl boyunca
 | ücretsiz ve sınırsız PDF yükleme yetkisi verilir.
 | Müşterilerin normal PayTR ödeme akışı bundan etkilenmez.
 */
const AI_OWNER_ACCESS_TOKEN_HASH = 'cee9481dd15945cd09478857a2ad60846f97a28a3c41ef7407efd2f992dc26c6';
const AI_OWNER_COOKIE_NAME = 'tr_ai_owner_unlimited';
const AI_OWNER_BROWSER_COOKIE_NAME = 'tr_ai_owner_browser_id';

function ai_owner_cookie_expected_value(): string {
    return hash_hmac('sha256', 'tercih-robotu-owner-unlimited-v1', AI_OWNER_ACCESS_TOKEN_HASH);
}

function ai_owner_request_is_https(): bool {
    return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
        || strtolower((string)($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '')) === 'https';
}

function ai_owner_browser_id(): string {
    $browserId = strtolower(trim((string)($_COOKIE[AI_OWNER_BROWSER_COOKIE_NAME] ?? '')));
    if (!preg_match('/^[a-f0-9]{64}$/', $browserId)) {
        try {
            $browserId = bin2hex(random_bytes(32));
        } catch (Throwable $e) {
            $browserId = hash('sha256', uniqid('owner-browser-', true) . '|' . microtime(true));
        }

        setcookie(AI_OWNER_BROWSER_COOKIE_NAME, $browserId, [
            'expires' => time() + (86400 * 365),
            'path' => '/',
            'secure' => ai_owner_request_is_https(),
            'httponly' => true,
            'samesite' => 'Strict',
        ]);
        $_COOKIE[AI_OWNER_BROWSER_COOKIE_NAME] = $browserId;
    }

    return $browserId;
}

function ai_owner_customer_key(string $browserId): string {
    return hash(
        'sha256',
        'tercih-robotu-owner-browser-account-v1|'
        . $browserId
        . '|'
        . AI_OWNER_ACCESS_TOKEN_HASH
    );
}

if (isset($_GET['owner_exit'])) {
    unset($_SESSION['ai_owner_unlimited']);
    setcookie(AI_OWNER_COOKIE_NAME, '', [
        'expires' => time() - 3600,
        'path' => '/',
        'secure' => ai_owner_request_is_https(),
        'httponly' => true,
        'samesite' => 'Strict',
    ]);
    unset($_COOKIE[AI_OWNER_COOKIE_NAME]);
    header('Location: /ia-step1.php');
    exit;
}

$ownerAccessKey = trim((string)($_GET['owner_key'] ?? ''));
if ($ownerAccessKey !== ''
    && hash_equals(AI_OWNER_ACCESS_TOKEN_HASH, hash('sha256', $ownerAccessKey))) {

    $_SESSION['ai_owner_unlimited'] = true;
    ai_owner_browser_id();

    $ownerCookieValue = ai_owner_cookie_expected_value();
    setcookie(AI_OWNER_COOKIE_NAME, $ownerCookieValue, [
        'expires' => time() + (86400 * 365),
        'path' => '/',
        'secure' => ai_owner_request_is_https(),
        'httponly' => true,
        'samesite' => 'Strict',
    ]);
    $_COOKIE[AI_OWNER_COOKIE_NAME] = $ownerCookieValue;

    // Gizli anahtar tarayıcı adres çubuğunda ve geçmişte kalmasın.
    header('Location: /ia-step1.php?owner=active');
    exit;
}

$ownerCookieValue = trim((string)($_COOKIE[AI_OWNER_COOKIE_NAME] ?? ''));
$ownerCookieValid = $ownerCookieValue !== ''
    && hash_equals(ai_owner_cookie_expected_value(), $ownerCookieValue);

$ownerUnlimited = !empty($_SESSION['ai_owner_unlimited']) || $ownerCookieValid;
if ($ownerUnlimited) {
    $_SESSION['ai_owner_unlimited'] = true;
    ai_owner_browser_id();
}

// PayTR sonuç belgesi hak sistemi
$paytrConfigPath = __DIR__ . '/paytr_config.php';
if (is_file($paytrConfigPath)) {
  require_once $paytrConfigPath;
}

$paymentCustomerKey = $ownerUnlimited
  ? ai_owner_customer_key(ai_owner_browser_id())
  : (function_exists('paytr_customer_key')
      ? paytr_customer_key(true)
      : trim((string)($_SESSION['tr_pdf_customer'] ?? $_COOKIE['tr_pdf_customer'] ?? '')));

$remainingPdfRights = 0;
if (!$ownerUnlimited) {
  $remainingPdfRights = function_exists('paytr_sync_pdf_rights_to_session') && $paymentCustomerKey !== ''
    ? paytr_sync_pdf_rights_to_session($paymentCustomerKey)
    : max(0, (int)($_SESSION['ai_pdf_upload_rights'] ?? 0));
}

$currentStep1ForAccess = (isset($_SESSION['step1']) && is_array($_SESSION['step1'])) ? $_SESSION['step1'] : [];
$currentPdfAccessKey = trim((string)($currentStep1ForAccess['ai_pdf_access_key'] ?? $_SESSION['ai_current_pdf_key'] ?? ''));
$currentPdfAuthorized = false;
if ($currentPdfAccessKey !== '') {
  if ($ownerUnlimited) {
    $currentPdfAuthorized = true;
  } elseif (function_exists('paytr_pdf_is_authorized') && $paymentCustomerKey !== '') {
    $currentPdfAuthorized = paytr_pdf_is_authorized($paymentCustomerKey, $currentPdfAccessKey);
  } else {
    $currentPdfAuthorized = !empty($_SESSION['ai_authorized_pdf_keys'][$currentPdfAccessKey]);
  }
}
$canUploadNewPdf = $ownerUnlimited || $remainingPdfRights > 0;
$paymentSuccessNotice = (string)($_GET['odeme'] ?? '') === 'basarili';

// mbstring kapalıysa sayfa patlamasın diye güvenli fallback
if (!function_exists('mb_strlen')) { function mb_strlen($s, $enc=null){ return strlen((string)$s); } }
if (!function_exists('mb_substr')) { function mb_substr($s, $start, $len=null, $enc=null){ return $len===null ? substr((string)$s, (int)$start) : substr((string)$s, (int)$start, (int)$len); } }
if (!function_exists('mb_strpos')) { function mb_strpos($haystack, $needle, $offset=0, $enc=null){ return strpos((string)$haystack, (string)$needle, (int)$offset); } }

// === PDF + Kullanıcı Bilgisi Kayıt (DB + pfdx364 dizini) ===
// Not: İstersen ENV ile ayarla:
//   YKS_PDFLOG_DSN   = mysql:host=localhost;dbname=DB_ADI;charset=utf8mb4
//   YKS_PDFLOG_USER  = kullanici
//   YKS_PDFLOG_PASS  = sifre
//   YKS_PDFLOG_TABLE = yks_pdf_kayitlar
$PDF_SAVE_DIRNAME = 'pfdx364';
$DBCFG = [
  'dsn'   => getenv('YKS_PDFLOG_DSN')  ?: 'mysql:host=localhost;dbname=univs;charset=utf8mb4',
  'user'  => getenv('YKS_PDFLOG_USER') ?: '',
  'pass'  => getenv('YKS_PDFLOG_PASS') ?: 'Fg5454sddftftSSDf244',
  'table' => getenv('YKS_PDFLOG_TABLE')?: 'yks_pdf_kayitlar',
];

function _yks_debug_enabled(): bool {
  return (isset($_GET['debug']) && $_GET['debug'] == '1');
}
function _yks_json($arr){
  echo json_encode($arr, JSON_UNESCAPED_UNICODE);
}
function _yks_table_name(string $t): string {
  // tablo adını güvenli tut
  if (!preg_match('/^[A-Za-z0-9_]+$/', $t)) return 'yks_pdf_kayitlar';
  return $t;
}
function _yks_pdo(): ?PDO {
  static $pdo = null;
  global $DBCFG;
  if ($pdo !== null) return $pdo;
  try {
    $pdo = new PDO($DBCFG['dsn'], $DBCFG['user'], $DBCFG['pass'], [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
      PDO::ATTR_EMULATE_PREPARES => false,
    ]);
    return $pdo;
  } catch (Throwable $e) {
    if (_yks_debug_enabled()) {
      error_log('[YKS-PDFLOG][PDO] '.$e->getMessage());
    }
    return null;
  }
}
function _yks_ensure_table(PDO $pdo): void {
  global $DBCFG;
  $t = _yks_table_name((string)$DBCFG['table']);
  // Eğer zaten oluşturduysan bu hiçbir şeyi bozmaz.
  $sql = "CREATE TABLE IF NOT EXISTS `$t` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `full_name` VARCHAR(255) NULL,
    `tckn` VARCHAR(11) NULL,
    `phone` VARCHAR(32) NULL,
    `email` VARCHAR(255) NULL,
    `exam_year` INT NULL,
    `pdf_original` VARCHAR(255) NULL,
    `pdf_path` VARCHAR(512) NOT NULL,
    `ip` VARCHAR(45) NULL,
    `user_agent` VARCHAR(255) NULL,
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_tckn` (`tckn`),
    KEY `idx_created_at` (`created_at`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_turkish_ci";
  $pdo->exec($sql);
}
function _yks_norm_str($v, int $max = 255): ?string {
  $v = trim((string)($v ?? ''));
  if ($v === '') return null;
  if (mb_strlen($v) > $max) $v = mb_substr($v, 0, $max);
  return $v;
}
function _yks_norm_tckn($v): ?string {
  $v = preg_replace('/\D+/', '', (string)($v ?? ''));
  if ($v === '') return null;
  if (strlen($v) > 11) $v = substr($v, 0, 11);
  return $v;
}
function _yks_norm_year($v): ?int {
  $v = trim((string)($v ?? ''));
  if ($v === '' or !preg_match('/^\d{4}$/', $v)) return null;
  $y = (int)$v;
  if ($y < 2000 || $y > 2100) return null;
  return $y;
}


/*
 |--------------------------------------------------------------------------
 | TEK T.C. = TEK PDF / TEK SOHBET OTURUMU
 |--------------------------------------------------------------------------
 | Devam Et düğmesine tekrar basılsa bile aynı T.C. için yeni bir PDF/sohbet
 | anahtarı oluşturulmaz. Daha önce kaydedilmiş ilk profil kullanılır.
 */
function _ai_step1_profile_tckn(array $step1): string {
  $tckn = preg_replace('/\D+/', '', (string)(
    $step1['tckn']
    ?? $step1['tc']
    ?? $step1['tc_kimlik_no']
    ?? $step1['tcno']
    ?? ''
  ));

  return strlen($tckn) === 11 ? $tckn : '';
}

function _ai_step1_profile_time(array $profile): int {
  foreach (['uploaded_at', 'authorized_at', 'created_at', 'updated_at'] as $field) {
    $value = trim((string)($profile[$field] ?? ''));
    if ($value === '') continue;

    $time = strtotime($value);
    if ($time !== false && $time > 0) return $time;
  }

  return PHP_INT_MAX;
}

function _ai_step1_find_canonical_tc_profile(
  string $customerKey,
  array $candidateStep1
): ?array {
  $tckn = _ai_step1_profile_tckn($candidateStep1);

  if ($tckn === ''
      || $customerKey === ''
      || !function_exists('paytr_list_pdf_profiles')) {
    return null;
  }

  $matches = [];

  foreach (paytr_list_pdf_profiles($customerKey) as $profile) {
    if (!is_array($profile)) continue;

    $profileStep1 = isset($profile['step1']) && is_array($profile['step1'])
      ? $profile['step1']
      : [];

    if (_ai_step1_profile_tckn($profileStep1) !== $tckn) continue;

    $pdfKey = trim((string)($profile['pdf_key'] ?? ''));
    if (!preg_match('/^[a-f0-9]{64}$/', $pdfKey)) continue;

    $matches[] = $profile;
  }

  if (!$matches) return null;

  /*
   | İlk yüklenen profil kalıcı ana profil kabul edilir.
   | Sonraki Devam Et işlemleri daima bu anahtara döner.
   */
  usort($matches, function (array $a, array $b): int {
    $timeCompare = _ai_step1_profile_time($a) <=> _ai_step1_profile_time($b);
    if ($timeCompare !== 0) return $timeCompare;

    return strcmp(
      (string)($a['pdf_key'] ?? ''),
      (string)($b['pdf_key'] ?? '')
    );
  });

  return $matches[0];
}

function _ai_step1_merge_with_canonical_profile(
  array $canonicalProfile,
  array $postedStep1
): array {
  $canonicalStep1 = isset($canonicalProfile['step1'])
    && is_array($canonicalProfile['step1'])
      ? $canonicalProfile['step1']
      : [];

  /*
   | Formda elle düzeltilmiş puan/ad gibi alanları koru; ancak PDF dosya yolu,
   | log numarası ve erişim anahtarı ana profilinkinden değişmesin.
   */
  $protectedKeys = [
    'ai_pdf_access_key',
    'ai_pdf_customer_key',
    'pdflog_id',
    'pdflog_pdf_path',
    'pdflog_pdf_original',

    // Aday kimliği yalnız ilgili PDF'nin kalıcı profilinden alınır.
    // Tarayıcı geri tuşu / bfcache nedeniyle başka adayın form değeri
    // aynı T.C. oturumunun üzerine yazılamaz.
    'full_name',
    'ad_soyad',
    'adsoyad',
    'adi_soyadi',
    'tckn',
    'tc',
    'tc_kimlik_no',
    'tcno',
    'exam_year',
  ];

  foreach ($postedStep1 as $key => $value) {
    if (in_array((string)$key, $protectedKeys, true)) continue;
    if (is_array($value) || is_object($value)) continue;

    $text = trim((string)$value);
    if ($text === '' && isset($canonicalStep1[$key])) continue;
    $canonicalStep1[$key] = $text;
  }

  $canonicalPdfKey = trim((string)($canonicalProfile['pdf_key'] ?? ''));
  if ($canonicalPdfKey !== '') {
    $canonicalStep1['ai_pdf_access_key'] = $canonicalPdfKey;
  }

  if (!empty($canonicalProfile['pdf_path'])) {
    $canonicalStep1['pdflog_pdf_path'] = (string)$canonicalProfile['pdf_path'];
  }

  if (!empty($canonicalProfile['original_name'])) {
    $canonicalStep1['pdflog_pdf_original'] = (string)$canonicalProfile['original_name'];
  }

  return $canonicalStep1;
}
function _yks_insert_log(string $pdfRel, ?string $pdfOrig, array $fields = []): ?int {
  global $DBCFG;
  $pdo = _yks_pdo();
  if (!$pdo) return null;
  _yks_ensure_table($pdo);
  $t = _yks_table_name((string)$DBCFG['table']);

  $full = _yks_norm_str($fields['full_name'] ?? null, 255);
  $tckn = _yks_norm_tckn($fields['tckn'] ?? null);
  $phone = _yks_norm_str($fields['phone'] ?? null, 32);
  $email = _yks_norm_str($fields['email'] ?? null, 255);
  $year  = _yks_norm_year($fields['exam_year'] ?? null);

  $ip = _yks_norm_str($_SERVER['REMOTE_ADDR'] ?? null, 45);
  $ua = _yks_norm_str($_SERVER['HTTP_USER_AGENT'] ?? null, 255);

  $stmt = $pdo->prepare("INSERT INTO `$t` (full_name,tckn,phone,email,exam_year,pdf_original,pdf_path,ip,user_agent)
                         VALUES (:full,:tckn,:phone,:email,:year,:porig,:ppath,:ip,:ua)");
  $stmt->execute([
    ':full' => $full,
    ':tckn' => $tckn,
    ':phone' => $phone,
    ':email' => $email,
    ':year' => $year,
    ':porig' => _yks_norm_str($pdfOrig, 255),
    ':ppath' => $pdfRel,
    ':ip' => $ip,
    ':ua' => $ua,
  ]);
  $id = (int)$pdo->lastInsertId();
  $_SESSION['pdflog_id'] = $id;
  $_SESSION['pdflog_pdf_path'] = $pdfRel;
  $_SESSION['pdflog_pdf_original'] = $pdfOrig;
  return $id;
}
function _yks_update_log(int $id, array $fields): bool {
  global $DBCFG;
  $pdo = _yks_pdo();
  if (!$pdo) return False;
  _yks_ensure_table($pdo);
  $t = _yks_table_name((string)$DBCFG['table']);

  $full = _yks_norm_str($fields['full_name'] ?? null, 255);
  $tckn = _yks_norm_tckn($fields['tckn'] ?? null);
  $phone = _yks_norm_str($fields['phone'] ?? null, 32);
  $email = _yks_norm_str($fields['email'] ?? null, 255);
  $year  = _yks_norm_year($fields['exam_year'] ?? null);

  $stmt = $pdo->prepare("UPDATE `$t` SET full_name=:full, tckn=:tckn, phone=:phone, email=:email, exam_year=:year WHERE id=:id");
  $stmt->execute([
    ':full' => $full,
    ':tckn' => $tckn,
    ':phone' => $phone,
    ':email' => $email,
    ':year' => $year,
    ':id' => $id,
  ]);
  return True;
}


function _yks_delete_log(int $id): void {
  if ($id <= 0) return;
  global $DBCFG;
  $pdo = _yks_pdo();
  if (!$pdo) return;

  try {
    _yks_ensure_table($pdo);
    $t = _yks_table_name((string)$DBCFG['table']);
    $stmt = $pdo->prepare("DELETE FROM `$t` WHERE id = :id LIMIT 1");
    $stmt->execute([':id' => $id]);
  } catch (Throwable $e) {
    if (_yks_debug_enabled()) error_log('[YKS-PDFLOG][DELETE] '.$e->getMessage());
  }
}

// Kullanıcı bilgilerini (ad/soyad, tc, telefon...) sonradan güncellemek için:
if (isset($_GET['logsync']) && $_SERVER['REQUEST_METHOD'] === 'POST') {
  header('Content-Type: application/json; charset=utf-8');
  $id = (int)($_POST['log_id'] ?? ($_SESSION['pdflog_id'] ?? 0));
  if ($id <= 0) {
    _yks_json(['ok'=>false,'error'=>'log_id_yok']);
    exit;
  }
  try {
    $ok = _yks_update_log($id, $_POST);
    _yks_json(['ok'=>$ok, 'log_id'=>$id]);
  } catch (Throwable $e) {
    if (_yks_debug_enabled()) error_log('[YKS-PDFLOG][UPDATE] '.$e->getMessage());
    _yks_json(['ok'=>false,'error'=>'db_update_fail','detail'=> _yks_debug_enabled() ? $e->getMessage() : null]);
  }
  exit;
}


if ($_SERVER['REQUEST_METHOD'] === 'POST' && (($_POST['action'] ?? '') === 'clear_all_steps')) {
  unset(
    $_SESSION['step1'],
    $_SESSION['step2'],
    $_SESSION['step3'],
    $_SESSION['step4'],
    $_SESSION['step4_program'],
    $_SESSION['step5'],
    $_SESSION['pdflog_id'],
    $_SESSION['pdflog_pdf_path'],
    $_SESSION['pdflog_pdf_original'],
    $_SESSION['ai_current_pdf_key']
  );

  header('Content-Type: application/json; charset=utf-8');
  echo json_encode(['ok' => true], JSON_UNESCAPED_UNICODE);
  exit;
}


// === AI TERCIH ROBOTU YONLENDIRME ===
// Normal form gonderiminde Step1 verilerini session'a kaydeder ve chat sayfasina yollar.
if ($_SERVER['REQUEST_METHOD'] === 'POST'
    && !isset($_GET['pdfparse'])
    && !isset($_GET['logsync'])
    && (($_POST['action'] ?? '') !== 'clear_all_steps')) {

  /*
   | Devam Et'e basılmadan önce açık olan PDF'yi kaydet.
   | Örnek: Zeynep sohbeti açıkken tarayıcı geri tuşuyla Ali formuna dönülürse
   | Zeynep'in sohbeti önce Zeynep anahtarına yazılacak, sonra Ali yüklenecek.
   */
  $previousActivePdfKey = trim((string)(
    $_SESSION['ai_current_pdf_key']
    ?? ($_SESSION['step1']['ai_pdf_access_key'] ?? '')
  ));

  // Önce PDF parse sırasında session'a alınan verileri koru.
  // Bazı tarayıcı/fieldset durumlarında form POST tüm puan-sıra alanlarını göndermeyebiliyor;
  // boş bir diziyle başlarsak AI tarafı PDF sıralarını kaybediyor.
  $step1 = (isset($_SESSION['step1']) && is_array($_SESSION['step1'])) ? $_SESSION['step1'] : [];

  foreach ($_POST as $k => $v) {
    if (is_array($v)) continue;
    $key = preg_replace('/[^A-Za-z0-9_]/', '', (string)$k);
    if ($key === '') continue;
    $val = trim((string)$v);
    // Boş gelen POST alanı, PDF'den okunmuş session değerini ezmesin.
    if ($val === '' && isset($step1[$key]) && trim((string)$step1[$key]) !== '') continue;
    $step1[$key] = $val;
  }

  // Öğrenci adını özellikle koru. Chat sayfası buradan hitap edecek.
  $postedFullName = trim((string)($_POST['full_name'] ?? ''));
  if ($postedFullName !== '') {
    $step1['full_name'] = $postedFullName;
    $_SESSION['ai_student_name'] = $postedFullName;
  } elseif (!empty($_SESSION['ai_student_name'])) {
    $step1['full_name'] = (string)$_SESSION['ai_student_name'];
  } elseif (!empty($_SESSION['pdflog_full_name'])) {
    $step1['full_name'] = (string)$_SESSION['pdflog_full_name'];
    $_SESSION['ai_student_name'] = (string)$_SESSION['pdflog_full_name'];
  }

  // PDF log bilgileri korunur.
  if (!empty($_SESSION['pdflog_id'])) $step1['pdflog_id'] = $_SESSION['pdflog_id'];
  if (!empty($_SESSION['pdflog_pdf_path'])) $step1['pdflog_pdf_path'] = $_SESSION['pdflog_pdf_path'];
  if (!empty($_SESSION['pdflog_pdf_original'])) $step1['pdflog_pdf_original'] = $_SESSION['pdflog_pdf_original'];

  /*
   | Aynı T.C. daha önce kaydedilmişse Devam Et düğmesinin her basılışında
   | yeni sohbet açmak yerine mevcut tek PDF oturumuna dön.
   */
  // Yönetici test girişinde aynı T.C./PDF her yüklemede ayrı bir sohbet
  // oturumu olarak kalır. Normal ücretli kullanıcılarda tek T.C. kuralı korunur.
  $canonicalTcProfile = $ownerUnlimited
    ? null
    : _ai_step1_find_canonical_tc_profile(
        $paymentCustomerKey,
        $step1
      );

  if (is_array($canonicalTcProfile)) {
    $canonicalPdfKey = trim((string)($canonicalTcProfile['pdf_key'] ?? ''));

    if ($canonicalPdfKey !== '') {
      $step1 = _ai_step1_merge_with_canonical_profile(
        $canonicalTcProfile,
        $step1
      );

      $step1['ai_pdf_access_key'] = $canonicalPdfKey;
      $step1['ai_pdf_customer_key'] = $paymentCustomerKey;
      /*
       | Aktif anahtarı burada değiştirmiyoruz. Önce eski adayın sohbeti kendi
       | anahtarına kaydedilecek, ardından hedef adayın sohbeti yüklenecek.
       */
      $_SESSION['ai_previous_pdf_key_before_continue'] = $previousActivePdfKey;

      if (!isset($_SESSION['ai_authorized_pdf_keys'])
          || !is_array($_SESSION['ai_authorized_pdf_keys'])) {
        $_SESSION['ai_authorized_pdf_keys'] = [];
      }
      $_SESSION['ai_authorized_pdf_keys'][$canonicalPdfKey] = true;
    }
  }

  // Chat yalnızca ücreti ödenmiş ve bu tarayıcı için yetkilendirilmiş PDF ile açılır.
  $postedPdfAccessKey = trim((string)($step1['ai_pdf_access_key'] ?? $_SESSION['ai_current_pdf_key'] ?? ''));
  $postedPdfAuthorized = false;
  if ($postedPdfAccessKey !== '') {
    if (function_exists('paytr_pdf_is_authorized') && $paymentCustomerKey !== '') {
      $postedPdfAuthorized = paytr_pdf_is_authorized($paymentCustomerKey, $postedPdfAccessKey);
    } else {
      $postedPdfAuthorized = !empty($_SESSION['ai_authorized_pdf_keys'][$postedPdfAccessKey]);
    }
  }
  if (!$postedPdfAuthorized) {
    header('Location: /ia-step1.php?hak_hatasi=pdf_gerekli');
    exit;
  }

  /*
   | SOHBET BAĞLAMI DEĞİŞİMİ
   | 1. Önce açık olan adayın sohbetini kendi PDF anahtarına kaydet.
   | 2. Hedef adayın daha önceki sohbetini yükle.
   | 3. Son olarak hedef PDF ve aday profilini aktif yap.
   */
  if ($previousActivePdfKey !== ''
      && $previousActivePdfKey !== $postedPdfAccessKey
      && function_exists('paytr_store_ai_context_for_pdf')) {
    paytr_store_ai_context_for_pdf($previousActivePdfKey);
  }

  if ($previousActivePdfKey !== $postedPdfAccessKey
      && function_exists('paytr_restore_ai_context_for_pdf')) {
    paytr_restore_ai_context_for_pdf($postedPdfAccessKey);
  }

  $step1['ai_pdf_access_key'] = $postedPdfAccessKey;
  $step1['ai_pdf_customer_key'] = $paymentCustomerKey;
  $_SESSION['step1'] = $step1;
  $_SESSION['ai_current_pdf_key'] = $postedPdfAccessKey;
  $_SESSION['ai_previous_pdf_key_before_continue'] = $previousActivePdfKey;

  /*
   | Global aday adı önbelleklerini de hedef PDF'deki doğru isimle değiştir.
   | Böylece Ali açılırken Zeynep adı session'da kalmaz.
   */
  $activeCandidateFullName = trim((string)(
    $step1['full_name']
    ?? $step1['ad_soyad']
    ?? $step1['adsoyad']
    ?? $step1['adi_soyadi']
    ?? ''
  ));

  if ($activeCandidateFullName !== '') {
    $_SESSION['ai_student_name'] = $activeCandidateFullName;
    $_SESSION['pdflog_full_name'] = $activeCandidateFullName;
  }

  // Formda kullanıcı tarafından düzeltilen son değerleri aktif PDF profiline işle.
  $submittedPdfKey = trim((string)($step1['ai_pdf_access_key'] ?? $_SESSION['ai_current_pdf_key'] ?? ''));
  if ($submittedPdfKey !== '' && function_exists('paytr_save_pdf_profile') && $paymentCustomerKey !== '') {
    paytr_save_pdf_profile($paymentCustomerKey, $submittedPdfKey, [
      'step1' => $step1,
      'original_name' => (string)($step1['pdflog_pdf_original'] ?? ''),
      'pdf_path' => (string)($step1['pdflog_pdf_path'] ?? ''),
    ]);
  }

  unset($_SESSION['step2'], $_SESSION['step3'], $_SESSION['step4'], $_SESSION['step4_program'], $_SESSION['step5']);

  /*
   | Genel chat adresi yerine doğrudan mevcut PDF oturumunu aç.
   | Böylece tarayıcıdan geri gelip tekrar Devam Et'e basılması yeni bir
   | sohbet gibi yorumlanmaz.
   */
  if ($ownerUnlimited) {
    // Yönetici yüklemelerinde her PDF anahtarı ayrı oturumdur; tek T.C. uyarısı yoktur.
    unset($_SESSION['ai_single_tc_continue_notice']);
    header(
      'Location: /ia-tercih-robotu/?pdf='
      . rawurlencode($submittedPdfKey)
      . '&owner_upload=1'
    );
  } else {
    $_SESSION['ai_single_tc_continue_notice'] = true;
    header(
      'Location: /ia-tercih-robotu/?pdf='
      . rawurlencode($submittedPdfKey)
      . '&tek_tc=1'
    );
  }
  exit;
}

if (isset($_GET['pdfparse']) && $_SERVER['REQUEST_METHOD'] === 'POST') {
  header('Content-Type: application/json; charset=utf-8');

  $resp = ['ok' => false];

  // Hatalı veya mükerrer yüklemede açık olan belgenin oturumunu aynen geri yüklemek için.
  $preUploadSession = [
    'step1_exists' => array_key_exists('step1', $_SESSION),
    'step1' => $_SESSION['step1'] ?? null,
    'pdflog_id_exists' => array_key_exists('pdflog_id', $_SESSION),
    'pdflog_id' => $_SESSION['pdflog_id'] ?? null,
    'pdflog_pdf_path_exists' => array_key_exists('pdflog_pdf_path', $_SESSION),
    'pdflog_pdf_path' => $_SESSION['pdflog_pdf_path'] ?? null,
    'pdflog_pdf_original_exists' => array_key_exists('pdflog_pdf_original', $_SESSION),
    'pdflog_pdf_original' => $_SESSION['pdflog_pdf_original'] ?? null,
    'pdflog_full_name_exists' => array_key_exists('pdflog_full_name', $_SESSION),
    'pdflog_full_name' => $_SESSION['pdflog_full_name'] ?? null,
    'ai_student_name_exists' => array_key_exists('ai_student_name', $_SESSION),
    'ai_student_name' => $_SESSION['ai_student_name'] ?? null,
  ];

  $restorePreUploadSession = function() use ($preUploadSession): void {
    foreach ([
      'step1',
      'pdflog_id',
      'pdflog_pdf_path',
      'pdflog_pdf_original',
      'pdflog_full_name',
      'ai_student_name',
    ] as $key) {
      $existsKey = $key . '_exists';
      if (!empty($preUploadSession[$existsKey])) {
        $_SESSION[$key] = $preUploadSession[$key];
      } else {
        unset($_SESSION[$key]);
      }
    }
  };

  // Yeni PDF yüklemeden önce kalıcı hak bakiyesi kontrol edilir.
  $paymentCustomerKey = $ownerUnlimited
    ? ai_owner_customer_key(ai_owner_browser_id())
    : (function_exists('paytr_customer_key')
        ? paytr_customer_key(true)
        : trim((string)($_SESSION['tr_pdf_customer'] ?? $_COOKIE['tr_pdf_customer'] ?? '')));
  $remainingPdfRights = 0;
  if (!$ownerUnlimited) {
    $remainingPdfRights = function_exists('paytr_sync_pdf_rights_to_session') && $paymentCustomerKey !== ''
      ? paytr_sync_pdf_rights_to_session($paymentCustomerKey)
      : max(0, (int)($_SESSION['ai_pdf_upload_rights'] ?? 0));
  }

  if (!$ownerUnlimited && $remainingPdfRights <= 0) {
    http_response_code(403);
    $resp['error'] = 'pdf_yukleme_hakki_yok';
    $resp['message'] = 'Yeni Sonuç Belgesi yükleme hakkınız kalmadı. Yeni bir paket satın almalısınız.';
    $resp['remaining_pdf_rights'] = 0;
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  if (!isset($_FILES['pdf']) || empty($_FILES['pdf']['tmp_name'])) {
    $resp['error'] = 'pdf_yok';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $tmp = $_FILES['pdf']['tmp_name'];
  $origName = $_FILES['pdf']['name'] ?? 'osym.pdf';

  // === GÜVENLİ PDF KONTROLÜ ===
  // Tarayıcıdaki accept="application/pdf" tek başına güvenlik değildir.
  // Dosyayı kaydetmeden ÖNCE: upload hatası, uzantı, MIME ve gerçek PDF imzası kontrol edilir.
  $uploadErr = (int)($_FILES['pdf']['error'] ?? UPLOAD_ERR_NO_FILE);
  if ($uploadErr !== UPLOAD_ERR_OK) {
    $resp['error'] = 'dosya_yukleme_hatasi';
    $resp['code'] = $uploadErr;
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  if (!is_uploaded_file($tmp)) {
    $resp['error'] = 'gecersiz_yukleme';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $size = (int)($_FILES['pdf']['size'] ?? 0);
  $maxPdfSize = 25 * 1024 * 1024; // 25 MB
  if ($size <= 0 || $size > $maxPdfSize) {
    $resp['error'] = 'pdf_boyutu_gecersiz';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $ext = strtolower(pathinfo((string)$origName, PATHINFO_EXTENSION));
  if ($ext !== 'pdf') {
    $resp['error'] = 'sadece_pdf_yuklenebilir';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $mime = '';
  if (function_exists('finfo_open')) {
    $fi = @finfo_open(FILEINFO_MIME_TYPE);
    if ($fi) {
      $mime = (string)@finfo_file($fi, $tmp);
      @finfo_close($fi);
    }
  }
  if ($mime !== '' && !in_array($mime, ['application/pdf', 'application/x-pdf'], true)) {
    $resp['error'] = 'gercek_pdf_degil';
    if (_yks_debug_enabled()) $resp['mime'] = $mime;
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $fh = @fopen($tmp, 'rb');
  $header = $fh ? (string)@fread($fh, 5) : '';
  if ($fh) @fclose($fh);
  if ($header !== '%PDF-') {
    $resp['error'] = 'gercek_pdf_degil';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  /*
   |--------------------------------------------------------------------------
   | ÖN DOĞRULAMA: DOSYAYI KALICI ALANA TAŞIMADAN ÖNCE YILI OKU
   |--------------------------------------------------------------------------
   | 2024/2025 gibi geçersiz ama gerçek PDF dosyaları inceleme amacıyla
   | pfdx364 klasörüne kaydedilir. Ancak geçerli PDF profiline eklenmez,
   | hak düşürmez ve aktif 2026 belgesini veya sohbetini değiştirmez.
   */
  $runCmd = function(string $cmd): ?string {
    if (function_exists('shell_exec')) {
      $r = shell_exec($cmd);
      return is_string($r) ? $r : null;
    }
    if (function_exists('exec')) {
      $lines = [];
      $rc = 0;
      exec($cmd, $lines, $rc);
      return ($rc === 0) ? implode("\n", $lines) : null;
    }
    return null;
  };

  /*
   | Hatalı ama gerçek PDF yüklemelerini geçerli PDF'lerle aynı pfdx364
   | klasöründe sakla. Dosya adında HATALI etiketi ve hata sebebi bulunur.
   | Bu dosyalar geçerli belge sayılmaz, normal PDF profiline eklenmez
   | ve kullanıcı hakkından düşülmez.
   */
  $saveRejectedPdf = function(string $reason, array $details = []) use ($tmp, $origName, $PDF_SAVE_DIRNAME): array {
    $rejectedDir = __DIR__ . DIRECTORY_SEPARATOR . $PDF_SAVE_DIRNAME;

    if (!is_dir($rejectedDir)) {
      @mkdir($rejectedDir, 0755, true);
    }

    if (!is_dir($rejectedDir) || !is_writable($rejectedDir)) {
      return [
        'saved' => false,
        'error' => 'pdf_klasoru_yazilamadi',
      ];
    }

    $base = pathinfo((string)$origName, PATHINFO_FILENAME);
    $base = preg_replace('/[^A-Za-z0-9_\-]+/u', '_', (string)$base);
    $base = trim((string)$base, '_-');
    if ($base === '') $base = 'pdf';

    $reasonForName = preg_replace('/[^A-Za-z0-9_\-]+/', '_', $reason);
    $reasonForName = trim((string)$reasonForName, '_-');
    if ($reasonForName === '') $reasonForName = 'gecersiz';

    try {
      $rand = bin2hex(random_bytes(5));
    } catch (Throwable $e) {
      $rand = substr(sha1(uniqid('', true)), 0, 10);
    }

    $fileName = date('Ymd_His')
      . '_' . $rand
      . '_HATALI_'
      . $reasonForName
      . '_' . $base
      . '.pdf';

    $absolutePath = $rejectedDir . DIRECTORY_SEPARATOR . $fileName;
    $relativePath = $PDF_SAVE_DIRNAME . '/' . $fileName;

    $moved = false;
    if (is_uploaded_file($tmp)) {
      $moved = @move_uploaded_file($tmp, $absolutePath);
    } elseif (is_file($tmp)) {
      // Test veya özel sunucu akışlarında güvenli yedek.
      $moved = @rename($tmp, $absolutePath);
      if (!$moved) {
        $moved = @copy($tmp, $absolutePath);
        if ($moved) @unlink($tmp);
      }
    }

    if (!$moved || !is_file($absolutePath)) {
      return [
        'saved' => false,
        'error' => 'hatali_pdf_tasinamadi',
      ];
    }

    @chmod($absolutePath, 0640);

    $metadata = [
      'saved_at' => date('c'),
      'reason' => $reason,
      'original_name' => (string)$origName,
      'stored_file' => $fileName,
      'relative_path' => $relativePath,
      'ip' => (string)($_SERVER['REMOTE_ADDR'] ?? ''),
      'user_agent' => mb_substr((string)($_SERVER['HTTP_USER_AGENT'] ?? ''), 0, 500),
      'details' => $details,
    ];

    @file_put_contents(
      $absolutePath . '.json',
      json_encode($metadata, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT),
      LOCK_EX
    );
    @chmod($absolutePath . '.json', 0640);

    return [
      'saved' => true,
      'file_name' => $fileName,
      'relative_path' => $relativePath,
    ];
  };

  $hasUsefulText = function($text): bool {
    $text = preg_replace('/[\x00-\x1F\x7F]+/u', ' ', (string)$text);
    return preg_match('/[A-Za-zÇĞİÖŞÜçğıöşü0-9]{3,}/u', (string)$text) === 1;
  };

  $fastTesseractText = function(string $pdfPath, int $dpi = 160, string $psm = '4') use ($runCmd): string {
    $ocrDir = rtrim(sys_get_temp_dir(), DIRECTORY_SEPARATOR)
      . DIRECTORY_SEPARATOR
      . 'yks_fastocr_' . bin2hex(random_bytes(6));

    @mkdir($ocrDir, 0700, true);
    if (!is_dir($ocrDir) || !is_writable($ocrDir)) return '';

    $prefix = $ocrDir . DIRECTORY_SEPARATOR . 'page';

    $runCmd(
      'pdftoppm -f 1 -l 1 -r ' . (int)$dpi
      . ' -gray -png '
      . escapeshellarg($pdfPath) . ' '
      . escapeshellarg($prefix)
      . ' 2>/dev/null'
    );

    $imgs = glob($ocrDir . DIRECTORY_SEPARATOR . 'page-*.png') ?: [];
    natsort($imgs);

    $text = '';
    $img = count($imgs) ? reset($imgs) : null;

    if ($img && is_file($img)) {
      $text = (string)$runCmd(
        'tesseract ' . escapeshellarg($img)
        . ' stdout -l tur+eng --psm '
        . escapeshellarg($psm)
        . ' 2>/dev/null'
      );

      if (trim($text) === '') {
        $text = (string)$runCmd(
          'tesseract ' . escapeshellarg($img)
          . ' stdout -l eng --psm '
          . escapeshellarg($psm)
          . ' 2>/dev/null'
        );
      }
    }

    foreach ($imgs as $one) @unlink($one);
    @rmdir($ocrDir);

    return trim($text);
  };

  $out = $runCmd(
    'pdftotext -layout ' . escapeshellarg($tmp) . ' - 2>/dev/null'
  );
  $parseMethod = 'pdftotext_preflight';

  if (!$hasUsefulText($out)) {
    $parseMethod = 'tesseract_preflight_160dpi_psm4';
    $out = $fastTesseractText($tmp, 160, '4');
  }

  if (!$hasUsefulText($out)) {
    $parseMethod = 'tesseract_preflight_220dpi_psm4';
    $out = $fastTesseractText($tmp, 220, '4');
  }

  if (!$hasUsefulText($out)) {
    $rejectedSave = $saveRejectedPdf('ocr_ile_okunamadi', [
      'parse_method' => $parseMethod,
    ]);
    $rejectedNotice = !empty($rejectedSave['saved'])
      ? ' Belge inceleme amacıyla pfdx364 klasörüne kaydedildi;'
      : ' Belge pfdx364 klasörüne kaydedilemedi;';
    $restorePreUploadSession();

    http_response_code(422);
    echo json_encode([
      'ok' => false,
      'error' => 'pdf_ocr_ile_de_okunamadi',
      'message' => 'PDF okunamadı.' . $rejectedNotice . ' hakkınızdan düşülmedi ve açık belgeniz değiştirilmedi.',
      'rejected_pdf_saved' => !empty($rejectedSave['saved']),
      'upload_persisted' => false,
      'current_pdf_unchanged' => true,
      'remaining_pdf_rights' => $ownerUnlimited ? null : $remainingPdfRights,
      'owner_unlimited' => $ownerUnlimited,
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
  }

  /*
   | Sınav yılı yalnızca belge başlığından veya "Sınav Tarihi" satırından alınır.
   | Sayfanın üstündeki yazdırma tarihi gibi başka 2026 değerleri dikkate alınmaz.
   */
  $yearSource = strtr((string)$out, [
    'Ö'=>'O','ö'=>'o','Ü'=>'U','ü'=>'u','Ş'=>'S','ş'=>'s',
    'Ğ'=>'G','ğ'=>'g','Ç'=>'C','ç'=>'c','İ'=>'I','ı'=>'i'
  ]);

  $auto_exam_year = '';

  if (preg_match(
      '/\b(20[0-9]{2})\s+YUKSEKOGRETIM\s+KURUMLARI\s+SINAVI\s*\(YKS\)\s+SONUCLARI\b/iu',
      $yearSource,
      $yearMatch
  )) {
    $auto_exam_year = (string)$yearMatch[1];
  } elseif (preg_match(
      '/\b(20[0-9]{2})\s+YUKSEKOGRETIM\b/iu',
      $yearSource,
      $yearMatch
  )) {
    $auto_exam_year = (string)$yearMatch[1];
  } elseif (preg_match(
      '/SINAV\s+TARIHI\s*[:\-]?\s*(?:[0-9]{1,2}(?:\s*-\s*[0-9]{1,2})?\s+[A-Z]+\s+)?(20[0-9]{2})\b/iu',
      $yearSource,
      $yearMatch
  )) {
    $auto_exam_year = (string)$yearMatch[1];
  }

  if ($auto_exam_year !== '2026') {
    // Teknik ayrıntı kullanıcıya gösterilmez; sayfa içi kutuda yalnızca
    // "YKS SONUÇ BELGENİZ YÜKLENEMEDİ!" başlığı, doğru yükleme adımları ve destek alanı gösterilir.
    $yearMessage = 'PDF yüklenemedi.';

    $rejectedSave = $saveRejectedPdf('sinav_yili_gecersiz', [
      'detected_exam_year' => $auto_exam_year,
      'parse_method' => $parseMethod,
    ]);
    $rejectedNotice = !empty($rejectedSave['saved'])
      ? ' Belge inceleme amacıyla pfdx364 klasörüne kaydedildi;'
      : ' Belge pfdx364 klasörüne kaydedilemedi;';
    $restorePreUploadSession();

    http_response_code(422);
    echo json_encode([
      'ok' => false,
      'error' => 'yalnizca_2026_sonuc_belgesi',
      'message' => $yearMessage . $rejectedNotice . ' hakkınızdan düşülmedi ve açık belgeniz değiştirilmedi.',
      'detected_exam_year' => $auto_exam_year,
      'rejected_pdf_saved' => !empty($rejectedSave['saved']),
      'upload_persisted' => false,
      'current_pdf_unchanged' => true,
      'remaining_pdf_rights' => $ownerUnlimited ? null : $remainingPdfRights,
      'owner_unlimited' => $ownerUnlimited,
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
  }

  /*
   |-------------------------------------------------------------------------
   | 2026 ÖSYM YKS SONUÇ BELGESİ İÇERİK DOĞRULAMASI
   |-------------------------------------------------------------------------
   | OCR ile okunmuş PDF'ler de kabul edilir. Ancak alakasız PDF'ler, eksik
   | ekran görüntüleri ve başka belgeler geçerli profil olarak kaydedilmez.
   | İnceleme amacıyla geçerli PDF’lerle aynı pfdx364 klasörüne alınır ve hak düşmez.
   */
  $normalizeYksValidationText = function(string $text): string {
    $text = str_replace(
      ["\xE2\x80\x91", "\xE2\x80\x93", "\xE2\x80\x94", "\xE2\x88\x92", '‑', '–', '—', '−'],
      '-',
      $text
    );
    $text = strtr($text, [
      'Ö'=>'O','ö'=>'o','Ü'=>'U','ü'=>'u','Ş'=>'S','ş'=>'s',
      'Ğ'=>'G','ğ'=>'g','Ç'=>'C','ç'=>'c','İ'=>'I','ı'=>'i',
    ]);
    $text = strtoupper($text);

    // OCR'nin tek başına harf olarak okuduğu sıfırları sayı kabul et.
    $text = preg_replace('/(?<=\\s)[oO](?=\\s)/u', '0', $text);
    $text = preg_replace('/[^A-Z0-9,.:()\\-\\/]+/u', ' ', (string)$text);
    return trim((string)preg_replace('/\\s+/u', ' ', (string)$text));
  };

  $validationText = $normalizeYksValidationText((string)$out);

  $validationWindow = function(string $startPattern, int $length = 1800) use ($validationText): string {
    if (!preg_match($startPattern, $validationText, $match, PREG_OFFSET_CAPTURE)) return '';
    $offset = (int)($match[0][1] ?? 0);
    return substr($validationText, $offset, $length);
  };

  $scoreValuePattern = '(?:[0-9]{2,3}[,.][0-9]{3,5}|[0-9]{8})';
  $rankValuePattern  = '(?:[0-9]{1,3}(?:\\.[0-9]{3})+|[0-9]{1,9})';

  $titleOk = preg_match(
    '/\\b2026\\s+YUKSEK\\s*OGRETIM\\s+KURUMLARI\\s+SINAVI\\s*\\(?\\s*YKS\\s*\\)?\\s+SONUCLARI\\b/u',
    $validationText
  ) === 1;

  $tytTestsHeadingPattern = '/TYT\\s+TESTLERINDEKI\\s+DOGRU\\s+(?:VE\\s+)?YANLIS\\s+SAYILARI/u';
  $tytTestsWindow = $validationWindow($tytTestsHeadingPattern, 1500);
  preg_match_all('/(?<![0-9])[0-9]{1,2}(?![0-9])/u', $tytTestsWindow, $tytTestNumbers);
  $tytTestsOk = $tytTestsWindow !== '' && count($tytTestNumbers[0] ?? []) >= 8;

  $schoolHeadingPattern = '/OKUL\\s+VE\\s+ORTAOGRETIM\\s+BASARI\\s+PUAN(?:I)?\\s+BILGILERI/u';
  $schoolWindow = $validationWindow($schoolHeadingPattern, 1400);
  preg_match_all('/(?<![0-9])[0-9]{1,3}(?:[,.][0-9]{1,5})?(?![0-9])/u', $schoolWindow, $schoolNumbers);
  $schoolOk = $schoolWindow !== ''
    && preg_match('/DIPLOMA\\s+NOTU/u', $schoolWindow) === 1
    && preg_match('/(?:ORTAOGRETIM\\s+BASARI\\s+PUANI|\\bOBP\\b)/u', $schoolWindow) === 1
    && count($schoolNumbers[0] ?? []) >= 2;

  $examHeadingPattern = '/SINAV\\s+PUAN(?:I|LARI)?\\s+(?:VE\\s+)?BASARI\\s+SIRALARI/u';
  $examWindow = $validationWindow($examHeadingPattern, 4000);
  $examTytOk = $examWindow !== '' && preg_match(
    '/(?:^|\\s)TYT\\s+' . $scoreValuePattern . '\\s+' . $rankValuePattern . '(?:\\s|$)/u',
    $examWindow
  ) === 1;

  $placementHeadingPattern = '/YERLESTIRME\\s+PUAN(?:I|LARI)?\\s+(?:VE\\s+)?BASARI\\s+SIRALARI/u';
  $placementWindow = $validationWindow($placementHeadingPattern, 4000);
  $placementTytOk = $placementWindow !== '' && preg_match(
    '/(?:^|\\s)Y\\s*-?\\s*TYT\\s+' . $scoreValuePattern . '\\s+' . $rankValuePattern . '(?:\\s|$)/u',
    $placementWindow
  ) === 1;

  $missingYksParts = [];
  if (!$titleOk)        $missingYksParts[] = '2026 YKS Sonuçları başlığı';
  if (!$tytTestsOk)     $missingYksParts[] = 'TYT doğru/yanlış bilgileri';
  if (!$schoolOk)       $missingYksParts[] = 'Okul ve OBP bilgileri';
  if (!$examTytOk || !$placementTytOk) {
    $missingYksParts[] = 'Puan ve başarı sırası bilgileri';
  }

  if ($missingYksParts) {
    $rejectedSave = $saveRejectedPdf('yks_icerigi_gecersiz', [
      'missing_parts' => $missingYksParts,
      'parse_method' => $parseMethod,
      'detected_exam_year' => $auto_exam_year,
    ]);
    $rejectedNotice = !empty($rejectedSave['saved'])
      ? ' Belge inceleme amacıyla pfdx364 klasörüne kaydedildi;'
      : ' Belge pfdx364 klasörüne kaydedilemedi;';
    $restorePreUploadSession();

    http_response_code(422);
    echo json_encode([
      'ok' => false,
      'error' => 'gecersiz_yks_sonuc_belgesi',
      'message' => 'Yüklediğiniz PDF, geçerli bir 2026 ÖSYM YKS Sonuç Belgesi olarak doğrulanamadı. Lütfen ÖSYM AİS üzerindeki YKS Sonuç Belgesini Yazdır seçeneğini kullanıp PDF olarak kaydederek yeniden yükleyin. Bu denemede PDF yükleme hakkınızdan düşülmedi ve açık belgeniz değiştirilmedi.',
      'missing_parts' => $missingYksParts,
      'parse_method' => $parseMethod,
      'rejected_pdf_saved' => !empty($rejectedSave['saved']),
      'upload_persisted' => false,
      'current_pdf_unchanged' => true,
      'remaining_pdf_rights' => $ownerUnlimited ? null : $remainingPdfRights,
      'owner_unlimited' => $ownerUnlimited,
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
  }

  // PDF'yi kalıcı olarak pfdx364 dizinine kaydet
  $saveDir = __DIR__ . DIRECTORY_SEPARATOR . $PDF_SAVE_DIRNAME;
  if (!is_dir($saveDir)) {
    @mkdir($saveDir, 0755, true);
  }
  if (!is_dir($saveDir) || !is_writable($saveDir)) {
    $resp['error'] = 'pfdx364_yazma_izni_yok';
    if (_yks_debug_enabled()) {
      $resp['detail'] = ['dir' => $saveDir, 'is_dir' => is_dir($saveDir), 'writable' => is_writable($saveDir)];
    }
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $base = pathinfo((string)$origName, PATHINFO_FILENAME);
  $base = preg_replace('/[^A-Za-z0-9_\-]+/u', '_', (string)$base);
  if ($base === '' || $base === '_') $base = 'osym';
  $rand = bin2hex(random_bytes(4));
  $fname = date('Ymd_His') . '_' . $rand . '_' . $base . '.pdf';

  $absPdf = $saveDir . DIRECTORY_SEPARATOR . $fname;
  $relPdf = $PDF_SAVE_DIRNAME . '/' . $fname;

  if (!move_uploaded_file($tmp, $absPdf)) {
    $resp['error'] = 'move_uploaded_file_basarisiz';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  // DB kaydı oluştur (alanlar boş olabilir; sonra logsync ile güncellenir)
  try {
    $logId = _yks_insert_log($relPdf, $origName, $_POST);
    if ($logId) {
      $resp['log_id'] = $logId;
      $resp['pdf_path'] = $relPdf;
    } else {
      $resp['log_id'] = null;
      $resp['pdf_path'] = $relPdf;
      $resp['db_warn'] = 'db_baglanti_yok';
    }
  } catch (Throwable $e) {
    if (_yks_debug_enabled()) error_log('[YKS-PDFLOG][INSERT] '.$e->getMessage());
    $resp['log_id'] = null;
    $resp['pdf_path'] = $relPdf;
    $resp['db_warn'] = 'db_insert_fail';
    if (_yks_debug_enabled()) $resp['db_detail'] = $e->getMessage();
  }

  // PDF yükleme sırasında kullanıcı adı elle yazıldıysa session'a da al.
  $postedPdfFullName = trim((string)($_POST['full_name'] ?? ''));
  if ($postedPdfFullName !== '') {
    $_SESSION['ai_student_name'] = $postedPdfFullName;
    $_SESSION['pdflog_full_name'] = $postedPdfFullName;
    if (!isset($_SESSION['step1']) || !is_array($_SESSION['step1'])) $_SESSION['step1'] = [];
    $_SESSION['step1']['full_name'] = $postedPdfFullName;
  }

  // PDF metni ve sınav yılı, kalıcı yükleme işleminden önce doğrulandı.
  $resp['parse_method'] = $parseMethod;
  $resp['exam_year'] = '2026';
  $resp['upload_persisted'] = true;

  // Başlangıç response
  $resp['ok'] = true;
  if (isset($resp['log_id'])) { /* keep */ }

  // Aday bilgileri (TC, Ad Soyad, E-posta) - pdftotext çıktısından
  $auto_tckn = null;
  $auto_full = null;
  $auto_email = null;

  // TC Kimlik (11 hane)
  if (preg_match('/T\.?\s*C\.?\s*Kimlik\s*(?:No(?:su)?|Numarasi|Numarası)\s*[:\-]?\s*([0-9]{11})/iu', $out, $m)) {
    $auto_tckn = $m[1];
  } elseif (preg_match('/\b([0-9]{11})\b/u', $out, $m)) {
    // yedek: belgede geçen ilk 11 haneli sayı
    $auto_tckn = $m[1];
  }

  // Ad Soyad
  if (preg_match('/Ad[ıi]\s*(?:ve\s*)?Soyad[ıi]\s*[:\-]?\s*([^\r\n]+)/iu', $out, $m)) {
    $auto_full = trim($m[1]);
  } elseif (preg_match('/ADI\s*(?:VE\s*)?SOYADI\s*[:\-]?\s*([^\r\n]+)/iu', $out, $m)) {
    $auto_full = trim($m[1]);
  }
  if (!empty($auto_full)) {
    // satırda başka kolonlar varsa kırp
    $auto_full = preg_split('/\s{2,}/u', $auto_full)[0] ?? $auto_full;
    $auto_full = preg_split('/\s*(?:T\.?C\.?|TC\s*Kimlik|E-?Posta|Telefon)\b/iu', $auto_full)[0] ?? $auto_full;
    $auto_full = trim($auto_full);
  }

  // E-posta (varsa)
  if (preg_match('/([A-Z0-9._%+\-]+@[A-Z0-9.\-]+\.[A-Z]{2,})/i', $out, $m)) {
    $auto_email = trim($m[1]);
  }

  /*
   | AYNI SONUÇ BELGESİNİ İKİNCİ KEZ ENGELLE
   | T.C. kimlik numarası temel alınır. İki belgede de sınav yılı okunmuşsa
   | farklı yıllara ait belgeler ayrı kabul edilir.
   */
  // Sınav yılı kalıcı yükleme öncesinde kesin olarak 2026 doğrulandı.
  $auto_exam_year = '2026';

  $duplicateProfile = null;
  $normalizedIncomingTckn = preg_replace('/\D+/', '', (string)$auto_tckn);

  if (!$ownerUnlimited
      && strlen($normalizedIncomingTckn) === 11
      && $paymentCustomerKey !== ''
      && function_exists('paytr_list_pdf_profiles')) {

    foreach (paytr_list_pdf_profiles($paymentCustomerKey) as $existingProfile) {
      if (!is_array($existingProfile)) continue;
      $existingStep1 = (isset($existingProfile['step1']) && is_array($existingProfile['step1']))
        ? $existingProfile['step1']
        : [];

      $existingTckn = preg_replace('/\D+/', '', (string)(
        $existingStep1['tckn']
        ?? $existingStep1['tc']
        ?? $existingStep1['tc_kimlik_no']
        ?? $existingStep1['tcno']
        ?? ''
      ));

      if ($existingTckn !== $normalizedIncomingTckn) continue;

      $existingYear = trim((string)($existingStep1['exam_year'] ?? ''));
      $sameDocumentYear = $auto_exam_year === ''
        || $existingYear === ''
        || $existingYear === $auto_exam_year;

      if ($sameDocumentYear) {
        $duplicateProfile = $existingProfile;
        break;
      }
    }
  }

  if (is_array($duplicateProfile)) {
    $newLogId = (int)($resp['log_id'] ?? 0);
    if ($newLogId > 0) _yks_delete_log($newLogId);
    if (is_file($absPdf)) @unlink($absPdf);
    $restorePreUploadSession();

    $existingPdfKey = trim((string)($duplicateProfile['pdf_key'] ?? ''));
    $existingLabel = trim((string)($duplicateProfile['label'] ?? ''));
    if ($existingLabel === '') {
      $existingLabel = trim((string)(
        $duplicateProfile['step1']['full_name']
        ?? $duplicateProfile['step1']['ad_soyad']
        ?? 'Bu aday'
      ));
    }
    if ($existingLabel === '') $existingLabel = 'Bu adayın Sonuç Belgesi';

    http_response_code(409);
    echo json_encode([
      'ok' => false,
      'error' => 'ayni_sonuc_belgesi_zaten_yuklu',
      'message' => $existingLabel . ' daha önce yüklenmiş. Aynı Sonuç Belgesi ikinci kez yüklenemez ve hakkınızdan düşülmedi.',
      'existing_pdf_key' => $existingPdfKey,
      'existing_pdf_url' => $existingPdfKey !== ''
        ? '/ia-tercih-robotu/?pdf=' . rawurlencode($existingPdfKey)
        : '/ia-tercih-robotu/',
      'remaining_pdf_rights' => $remainingPdfRights,
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
  }

  // Response'a ekle (JS setIfEmpty ile dolduracak)
  if (!empty($auto_tckn))  $resp['tckn'] = $auto_tckn;
  if (!empty($auto_full)) {
    $resp['full_name'] = $auto_full;
    $_SESSION['ai_student_name'] = $auto_full;
    $_SESSION['pdflog_full_name'] = $auto_full;
    if (!isset($_SESSION['step1']) || !is_array($_SESSION['step1'])) $_SESSION['step1'] = [];
    $_SESSION['step1']['full_name'] = $auto_full;
  }
  if (!empty($auto_email)) $resp['email'] = $auto_email;

  // DB kaydını da otomatik bilgilerle güncelle (kullanıcı boş bırakmışsa)
  if (!empty($resp['log_id'])) {
    try {
      $fields = $_POST;
      if (empty(trim((string)($fields['tckn'] ?? ''))) && !empty($auto_tckn)) $fields['tckn'] = $auto_tckn;
      if (empty(trim((string)($fields['full_name'] ?? ''))) && !empty($auto_full)) $fields['full_name'] = $auto_full;
      if (empty(trim((string)($fields['email'] ?? ''))) && !empty($auto_email)) $fields['email'] = $auto_email;
      $fields['exam_year'] = '2026';
      _yks_update_log((int)$resp['log_id'], $fields);
    } catch (Throwable $e) {
      // sessiz geç
      if (_yks_debug_enabled()) error_log('[YKS-PDFLOG][AUTOUPDATE] '.$e->getMessage());
    }
  }

  
  // Puan tablosu satırlarında bazen farklı tire karakterleri (–, —, ‑, −) ve Türkçe harfler çıkabiliyor.
  // Özellikle "SÖZ / Y-SÖZ" gibi alanların kaçmaması için regex aramalarında normalize edilmiş kopya kullanıyoruz.
  $out_scores = $out;
  // Tire karakterlerini "-" yap
  $out_scores = str_replace(["\xE2\x80\x91", "\xE2\x80\x93", "\xE2\x80\x94", "\xE2\x88\x92", "‑", "–", "—", "−"], "-", $out_scores);
  // Türkçe harfleri ASCII'ye indir (SÖZ -> SOZ, DİL -> DIL vb.)
  $out_scores = strtr($out_scores, [
    'Ö'=>'O','ö'=>'o',
    'İ'=>'I','ı'=>'i',
    'Ş'=>'S','ş'=>'s',
    'Ğ'=>'G','ğ'=>'g',
    'Ü'=>'U','ü'=>'u',
    'Ç'=>'C','ç'=>'c',
  ]);

  $out_parse = preg_replace('/[^\S\r\n]+/u', ' ', $out_scores);
  $out_parse = preg_replace('/\r\n?|\r/u', "\n", (string)$out_parse);

  // OCR bazen 0 rakamını tek başına o/O olarak okur. Test doğru/yanlış sayıları için düzelt.
  $out_parse_tests = preg_replace('/(?<=\s)[oO](?=\s)/u', '0', (string)$out_parse);

  $setResp = function(string $key, $val) use (&$resp): void {
    $val = trim((string)($val ?? ''));
    if ($val === '') return;
    if (isset($resp[$key]) && trim((string)$resp[$key]) !== '') return;
    $resp[$key] = $val;
  };

  // Başlıktan sınav yılını yakala: "2024 Yükseköğretim..."
  if ($auto_exam_year !== '') {
    $setResp('exam_year', $auto_exam_year);
  } elseif (preg_match('/\b(20[0-9]{2})\s+Yuksekogretim/iu', $out_parse, $m)) {
    $setResp('exam_year', $m[1]);
  }

  // Okul / OBP alanları
  if (preg_match('/Diploma\s+Notu.*?([0-9]{1,3}[,.][0-9]{1,5})\s+([0-9]{2,3}[,.][0-9]{1,5})\s+([0-9]{3,})\s+([0-9]{3,})\s+([0-9]{3,})\s+([A-Za-z0-9\-]+)/isu', $out_parse, $m)) {
    $setResp('diploma', $m[1]);
    $setResp('obp', $m[2]);
    $setResp('okul_kodu', $m[3]);
    $setResp('okul_tur_kodu', $m[4]);
    $setResp('alan_kodu', $m[5]);
    $dal = strtoupper(trim($m[6]));
    if ($dal === 'A') $dal = '-'; // OCR bazen '-' işaretini 'a' okuyabiliyor
    $setResp('dal_no', $dal);
  }

  // TYT doğru/yanlış sayıları
  if (preg_match('/TYT\s+TESTLERINDEKI.*?Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/isu', $out_parse_tests, $m)) {
    $setResp('tyt_turkce_d', $m[1]); $setResp('tyt_turkce_y', $m[2]);
    $setResp('tyt_sosyal_d', $m[3]); $setResp('tyt_sosyal_y', $m[4]);
    $setResp('tyt_mat_d',    $m[5]); $setResp('tyt_mat_y',    $m[6]);
    $setResp('tyt_fen_d',    $m[7]); $setResp('tyt_fen_y',    $m[8]);
  }

  // AYT Türk Dili ve Edebiyatı - Sosyal Bilimler 1
  if (preg_match('/Turk\s+Dili\s+ve\s+Edebiyati\s+Tarih\s*-\s*1\s+Cografya\s*-\s*1\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/isu', $out_parse_tests, $m)) {
    $setResp('ayt_tde_d',    $m[1]); $setResp('ayt_tde_y',    $m[2]);
    $setResp('ayt_tarih1_d', $m[3]); $setResp('ayt_tarih1_y', $m[4]);
    $setResp('ayt_cog1_d',   $m[5]); $setResp('ayt_cog1_y',   $m[6]);
  }

  // AYT Sosyal Bilimler 2
  if (preg_match('/Tarih\s*-\s*2\s+Cografya\s*-\s*2\s+Felsefe\s+Grubu\s+DKAB.*?Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/isu', $out_parse_tests, $m)) {
    $setResp('ayt_tarih2_d',  $m[1]); $setResp('ayt_tarih2_y',  $m[2]);
    $setResp('ayt_cog2_d',    $m[3]); $setResp('ayt_cog2_y',    $m[4]);
    $setResp('ayt_felsefe_d', $m[5]); $setResp('ayt_felsefe_y', $m[6]);
    $setResp('ayt_dkab_d',    $m[7]); $setResp('ayt_dkab_y',    $m[8]);
  }

  // AYT Matematik - Fen Bilimleri
  if (preg_match('/Matematik.*?Fizik\s+Kimya\s+Biyoloji\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/isu', $out_parse_tests, $m)) {
    $setResp('ayt_mat_d',   $m[1]); $setResp('ayt_mat_y',   $m[2]);
    $setResp('ayt_fizik_d', $m[3]); $setResp('ayt_fizik_y', $m[4]);
    $setResp('ayt_kimya_d', $m[5]); $setResp('ayt_kimya_y', $m[6]);
    $setResp('ayt_biyo_d',  $m[7]); $setResp('ayt_biyo_y',  $m[8]);
  }

  // YDT doğru/yanlış sayıları + hangi dilden girildiği
  $normYdtLang = function($v): string {
    $v = preg_replace('/[^A-Za-zÇĞİÖŞÜçğıöşüİı\s\-\.\/]+/u', ' ', (string)$v);
    $v = trim(preg_replace('/\s+/u', ' ', $v));
    if ($v === '') return '';

    // PDF/OCR bazen Türkçe karakterleri ASCII okur: Ingilizce, Fransizca, Arapca vb.
    $ascii = strtr($v, [
      'Ç'=>'C','ç'=>'c','Ğ'=>'G','ğ'=>'g','İ'=>'I','ı'=>'i','Ö'=>'O','ö'=>'o','Ş'=>'S','ş'=>'s','Ü'=>'U','ü'=>'u'
    ]);
    $key = strtoupper(preg_replace('/[^A-Za-z]+/', '', $ascii));
    $map = [
      'INGILIZCE' => 'İngilizce',
      'ALMANCA' => 'Almanca',
      'FRANSIZCA' => 'Fransızca',
      'ARAPCA' => 'Arapça',
      'RUSCA' => 'Rusça',
    ];
    foreach ($map as $needle => $label) {
      if (strpos($key, $needle) !== false) return $label;
    }
    return $v;
  };

  if (preg_match('/YDT\s+TEST[^\n]*?DOGRU\s+VE\s+YANLIS\s+SAYILARI\s+([A-Za-zÇĞİÖŞÜçğıöşüİı\s\-\.\/]{3,80})\s+Dogru\s+Yanlis\s+([0-9]+)\s+([0-9]+)/isu', $out_parse_tests, $m)) {
    $setResp('ydt_dil_adi', $normYdtLang($m[1]));
    $setResp('ydt_dil_d', $m[2]);
    $setResp('ydt_dil_y', $m[3]);
  } elseif (preg_match('/YDT\s+TEST[^\n]*?DOGRU\s+VE\s+YANLIS\s+SAYILARI.*?Dogru\s+Yanlis\s+([0-9]+)\s+([0-9]+)/isu', $out_parse_tests, $m)) {
    // Dil adı okunamazsa bile doğru/yanlış sayıları boş kalmasın.
    $setResp('ydt_dil_d', $m[1]);
    $setResp('ydt_dil_y', $m[2]);
  }

// TÜM PUAN TÜRLERİ İÇİN REGEX PATTERN
  // Format: PUAN_TURU  Puan  Sıra  Y-PUAN_TURU  Y-Puan  Y-Sıra
  
  // TYT (Y-TYT / YTYT)
  $re_tyt = '/(?:^|\n)\s*TYT\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})\s+Y\s*-?\s*TYT\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})(?:\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9}))?/u';
  if (preg_match($re_tyt, $out_scores, $m)) {
    $resp['sinav_tyt_puan'] = $m[1];
    $resp['sinav_tyt_sira'] = $m[2];
    $resp['yer_tyt_puan'] = $m[3];
    $resp['yer_tyt_sira'] = $m[4];
    if (isset($m[5], $m[6]) && $m[5] !== '' && $m[6] !== '') {
      $resp['ek_tyt_puan'] = $m[5];
      $resp['ek_tyt_sira'] = $m[6];
    }

  }

  // SAY (Y-SAY / YSAY)
  $re_say = '/(?:^|\n)\s*SAY\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})\s+Y\s*-?\s*SAY\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})(?:\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9}))?/u';
  if (preg_match($re_say, $out_scores, $m)) {
    $resp['sinav_say_puan'] = $m[1];
    $resp['sinav_say_sira'] = $m[2];
    $resp['yer_say_puan'] = $m[3];
    $resp['yer_say_sira'] = $m[4];
    if (isset($m[5], $m[6]) && $m[5] !== '' && $m[6] !== '') {
      $resp['ek_say_puan'] = $m[5];
      $resp['ek_say_sira'] = $m[6];
    }

  }

  // SÖZ (Y-SÖZ / YSÖZ)
  // Not: Bazı PDF'lerde "Y‑SÖZ" gibi farklı tire karakterleri veya "SÖZ" harfleri bozulabiliyor.
  // Bu yüzden normalize edilmiş $out_scores üzerinde ASCII (SOZ) ile arıyoruz.
  $re_soz = '/(?:^|\n)\s*SOZ\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})\s+Y\s*-?\s*SOZ\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})' .
            '(?:\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9}))?/u';
  if (preg_match($re_soz, $out_scores, $m)) {
    $resp['sinav_soz_puan'] = $m[1];
    $resp['sinav_soz_sira'] = $m[2];
    $resp['yer_soz_puan'] = $m[3];
    $resp['yer_soz_sira'] = $m[4];
    if (isset($m[5], $m[6]) && $m[5] !== '' && $m[6] !== '') {
      $resp['ek_soz_puan'] = $m[5];
      $resp['ek_soz_sira'] = $m[6];
    }

  }

  // EA (Y-EA / YEA)
  $re_ea = '/(?:^|\n)\s*EA\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})\s+Y\s*-?\s*EA\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})(?:\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9}))?/u';
  if (preg_match($re_ea, $out_scores, $m)) {
    $resp['sinav_ea_puan'] = $m[1];
    $resp['sinav_ea_sira'] = $m[2];
    $resp['yer_ea_puan'] = $m[3];
    $resp['yer_ea_sira'] = $m[4];
    if (isset($m[5], $m[6]) && $m[5] !== '' && $m[6] !== '') {
      $resp['ek_ea_puan'] = $m[5];
      $resp['ek_ea_sira'] = $m[6];
    }

  }

  // DİL (Y-DİL / YDİL)
  $re_dil = '/(?:^|\n)\s*DIL\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})\s+Y\s*-?\s*DIL\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})(?:\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9}))?/u';
  if (preg_match($re_dil, $out_scores, $m)) {
    $resp['sinav_dil_puan'] = $m[1];
    $resp['sinav_dil_sira'] = $m[2];
    $resp['yer_dil_puan'] = $m[3];
    $resp['yer_dil_sira'] = $m[4];
    if (isset($m[5], $m[6]) && $m[5] !== '' && $m[6] !== '') {
      $resp['ek_dil_puan'] = $m[5];
      $resp['ek_dil_sira'] = $m[6];
    }

  }

  // OCR çıktı düzeni tabloyu bozarsa puan satırlarını sırasına göre yakala.
  $normScoreVal = function(string $v): string {
    $v = trim(str_replace(' ', '', $v));
    // OCR bazen 215,92920 yerine 21592920 okuyabilir.
    if (preg_match('/^[0-9]{8}$/', $v)) {
      return substr($v, 0, 3) . ',' . substr($v, 3);
    }
    return $v;
  };
  $normRankVal = function(string $v): string {
    return trim(str_replace([' ', '|'], '', $v));
  };
  $extractScorePairs = function(string $line) use ($normScoreVal, $normRankVal): array {
    $line = str_replace(['|', '¦'], ' ', $line);
    $pairs = [];
    if (preg_match_all('/\b([0-9]{2,3}[,.][0-9]{3,5}|[0-9]{8})\b\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{5,9})\b/u', $line, $mm, PREG_SET_ORDER)) {
      foreach ($mm as $one) {
        $pairs[] = [$normScoreVal($one[1]), $normRankVal($one[2])];
      }
    }
    return $pairs;
  };

  $scoreRows = [];
  $inScoreSection = false;
  foreach (preg_split('/\n+/', $out_parse) as $line) {
    $line = trim((string)$line);
    if ($line === '') continue;
    if (preg_match('/SINAV\s+PUANLARI|YERLESTIRME\s+PUANLARI/iu', $line)) {
      $inScoreSection = true;
      continue;
    }
    if ($inScoreSection && preg_match('/KILAVUZUN|BELGENIN\s+ASLINA|SONUC\s+BELGESI/iu', $line)) {
      break;
    }
    if (!$inScoreSection) continue;

    $pairs = $extractScorePairs($line);
    if (count($pairs) >= 2) {
      $scoreRows[] = $pairs;
    }
  }

  if (count($scoreRows) >= 3) {
    $types = ['tyt','say','soz','ea','dil'];
    foreach ($types as $idx => $type) {
      if (!isset($scoreRows[$idx])) continue;
      $pairs = $scoreRows[$idx];
      if (isset($pairs[0])) { $setResp("sinav_{$type}_puan", $pairs[0][0]); $setResp("sinav_{$type}_sira", $pairs[0][1]); }
      if (isset($pairs[1])) { $setResp("yer_{$type}_puan",   $pairs[1][0]); $setResp("yer_{$type}_sira",   $pairs[1][1]); }
      if (isset($pairs[2])) { $setResp("ek_{$type}_puan",    $pairs[2][0]); $setResp("ek_{$type}_sira",    $pairs[2][1]); }
    }
  }

  // Yerleşme durumu kontrolü
  $searchStr = "Kılavuzun 4.2. maddesi gereğince, yerleştirme puanlarınızın";
  if (mb_strpos($out, $searchStr) !== false || preg_match('/KILAVUZUN\s+4\.2\..*?OBP\s+katsayilari\s+yariya/isu', $out_parse)) {
    $resp['last_year_placement'] = 'yerlesti';
  } else {
    $resp['last_year_placement'] = 'yerlesmedi';
  }

  // Yeni belgeye geçmeden önce önceki aktif PDF'nin sohbet/filtre bağlamını sakla.
  $previousPdfAccessKey = trim((string)($_SESSION['ai_current_pdf_key'] ?? ''));
  if ($previousPdfAccessKey !== '' && function_exists('paytr_store_ai_context_for_pdf')) {
    paytr_store_ai_context_for_pdf($previousPdfAccessKey);
  }

  // PDF başarıyla okunduğu anda yalnız bir yükleme hakkı düşürülür.
  $pdfAccessKey = hash('sha256', $paymentCustomerKey . '|' . $relPdf);
  if ($ownerUnlimited) {
    /*
     | Yönetici erişiminde ücretli bakiye azaltılmaz.
     | PDF, çoklu belge kütüphanesinde normal belgeler gibi görünebilmesi için
     | müşteri hesabında yetkili belge olarak işaretlenir.
     */
    if (function_exists('paytr_mutate_pdf_rights')
        && function_exists('paytr_normalize_pdf_account')
        && $paymentCustomerKey !== '') {
      try {
        paytr_mutate_pdf_rights(function (&$accounts) use ($paymentCustomerKey, $pdfAccessKey) {
          $account = paytr_normalize_pdf_account($accounts[$paymentCustomerKey] ?? []);
          if (!isset($account['authorized_pdfs'][$pdfAccessKey])
              || !is_array($account['authorized_pdfs'][$pdfAccessKey])) {
            $account['authorized_pdfs'][$pdfAccessKey] = [
              'authorized_at' => date('Y-m-d H:i:s'),
              'owner_unlimited' => true,
            ];
          }
          $account['updated_at'] = date('Y-m-d H:i:s');
          $accounts[$paymentCustomerKey] = $account;
          return true;
        }, false);
      } catch (Throwable $e) {
        if (_yks_debug_enabled()) {
          error_log('[OWNER-UNLIMITED][AUTHORIZE] ' . $e->getMessage());
        }
      }
    }

    $consumeResult = [
      'ok' => true,
      'consumed' => false,
      'balance' => 0,
      'owner_unlimited' => true,
    ];
  } elseif (function_exists('paytr_consume_pdf_right')) {
    $consumeResult = paytr_consume_pdf_right($paymentCustomerKey, $pdfAccessKey);
  } else {
    $fallbackBalance = max(0, (int)($_SESSION['ai_pdf_upload_rights'] ?? 0));
    if ($fallbackBalance <= 0) {
      $consumeResult = ['ok' => false, 'balance' => 0, 'error' => 'pdf_hakki_yok'];
    } else {
      $fallbackBalance--;
      $_SESSION['ai_pdf_upload_rights'] = $fallbackBalance;
      $consumeResult = ['ok' => true, 'consumed' => true, 'balance' => $fallbackBalance];
    }
  }

  if (empty($consumeResult['ok'])) {
    @unlink($absPdf);
    http_response_code(403);
    echo json_encode([
      'ok' => false,
      'error' => 'pdf_yukleme_hakki_yok',
      'message' => 'Yeni Sonuç Belgesi yükleme hakkınız kalmadı. Yeni bir paket satın almalısınız.',
      'remaining_pdf_rights' => 0,
    ], JSON_UNESCAPED_UNICODE);
    exit;
  }

  $remainingPdfRights = max(0, (int)($consumeResult['balance'] ?? 0));
  $_SESSION['ai_pdf_upload_rights'] = $remainingPdfRights;
  $_SESSION['ai_current_pdf_key'] = $pdfAccessKey;
  if (function_exists('paytr_restore_ai_context_for_pdf')) {
    paytr_restore_ai_context_for_pdf($pdfAccessKey);
  }
  if (!isset($_SESSION['ai_authorized_pdf_keys']) || !is_array($_SESSION['ai_authorized_pdf_keys'])) {
    $_SESSION['ai_authorized_pdf_keys'] = [];
  }
  $_SESSION['ai_authorized_pdf_keys'][$pdfAccessKey] = true;
  $resp['pdf_access_granted'] = true;
  $resp['pdf_access_key'] = $pdfAccessKey;
  $resp['remaining_pdf_rights'] = $remainingPdfRights;
  $resp['owner_unlimited'] = $ownerUnlimited;

  // PDF'den okunan tüm önemli alanları hemen session'a yaz.
  // Böylece Devam Et sonrası ya da AI chat açıldığında puan/sıra kaybolmaz.
  $aiSessionKeys = [
    'tckn','full_name','email','exam_year','diploma','obp','okul_kodu','okul_tur_kodu','alan_kodu','dal_no','last_year_placement',
    'sinav_tyt_puan','sinav_tyt_sira','yer_tyt_puan','yer_tyt_sira','ek_tyt_puan','ek_tyt_sira',
    'sinav_say_puan','sinav_say_sira','yer_say_puan','yer_say_sira','ek_say_puan','ek_say_sira',
    'sinav_soz_puan','sinav_soz_sira','yer_soz_puan','yer_soz_sira','ek_soz_puan','ek_soz_sira',
    'sinav_ea_puan','sinav_ea_sira','yer_ea_puan','yer_ea_sira','ek_ea_puan','ek_ea_sira',
    'sinav_dil_puan','sinav_dil_sira','yer_dil_puan','yer_dil_sira','ek_dil_puan','ek_dil_sira',
    'tyt_turkce_d','tyt_turkce_y','tyt_sosyal_d','tyt_sosyal_y','tyt_mat_d','tyt_mat_y','tyt_fen_d','tyt_fen_y',
    'ayt_tde_d','ayt_tde_y','ayt_tarih1_d','ayt_tarih1_y','ayt_cog1_d','ayt_cog1_y',
    'ayt_tarih2_d','ayt_tarih2_y','ayt_cog2_d','ayt_cog2_y','ayt_felsefe_d','ayt_felsefe_y','ayt_dkab_d','ayt_dkab_y',
    'ayt_mat_d','ayt_mat_y','ayt_fizik_d','ayt_fizik_y','ayt_kimya_d','ayt_kimya_y','ayt_biyo_d','ayt_biyo_y','ydt_dil_adi','ydt_dil_d','ydt_dil_y'
  ];
  if (!isset($_SESSION['step1']) || !is_array($_SESSION['step1'])) $_SESSION['step1'] = [];
  foreach ($aiSessionKeys as $k) {
    if (isset($resp[$k]) && trim((string)$resp[$k]) !== '') {
      $_SESSION['step1'][$k] = trim((string)$resp[$k]);
    }
  }
  if (!empty($resp['log_id'])) $_SESSION['step1']['pdflog_id'] = (int)$resp['log_id'];
  if (!empty($resp['pdf_path'])) $_SESSION['step1']['pdflog_pdf_path'] = (string)$resp['pdf_path'];
  if (!empty($origName)) $_SESSION['step1']['pdflog_pdf_original'] = (string)$origName;
  $_SESSION['step1']['ai_pdf_access_key'] = $pdfAccessKey;
  $_SESSION['step1']['ai_pdf_customer_key'] = $paymentCustomerKey;

  // Bu belgenin aday/puan verilerini çoklu PDF kütüphanesine kaydet.
  if (function_exists('paytr_save_pdf_profile')) {
    $profileSave = paytr_save_pdf_profile($paymentCustomerKey, $pdfAccessKey, [
      'step1' => $_SESSION['step1'],
      'original_name' => $origName,
      'pdf_path' => $relPdf,
      'uploaded_at' => date('Y-m-d H:i:s'),
    ]);
    $resp['pdf_profile_saved'] = !empty($profileSave['ok']);
    if (empty($profileSave['ok'])) {
      $resp['pdf_profile_warning'] = (string)($profileSave['error'] ?? 'pdf_profili_kaydedilemedi');
    }
  }

  if (_yks_debug_enabled()) {
    $filled = [];
    foreach ($resp as $k => $v) {
      if (!in_array($k, ['ok','log_id','pdf_path','ocr_pdf_path','parse_method'], true) && trim((string)$v) !== '') $filled[] = $k;
    }
    $resp['debug_filled_count'] = count($filled);
    $resp['debug_filled_keys'] = $filled;
    $resp['debug_text_sample'] = mb_substr(preg_replace('/\s+/u', ' ', (string)$out), 0, 1800);
  }

  echo json_encode($resp, JSON_UNESCAPED_UNICODE);
  exit;
}

header('Content-Type: text/html; charset=utf-8');
?>
<!doctype html>
<html lang="tr">
<head>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1345582547235607"
     crossorigin="anonymous"></script>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <meta name="color-scheme" content="light only" />
  <title>Tercih Robotu • YKS Adım 1</title>

  <link rel="preload" href="/css/logo.png" as="image">
  <link rel="stylesheet" href="/css/styles.css?v=14">
  <link rel="icon" href="https://www.tercihrobotu.com.tr/duyurular/wp-content/uploads/2026/01/ico.png" sizes="32x32">
  <link rel="icon" href="https://www.tercihrobotu.com.tr/duyurular/wp-content/uploads/2026/01/ico.png" sizes="192x192">
  <link rel="apple-touch-icon" href="https://www.tercihrobotu.com.tr/duyurular/wp-content/uploads/2026/01/ico.png">
  <meta name="msapplication-TileImage" content="https://www.tercihrobotu.com.tr/duyurular/wp-content/uploads/2026/01/ico.png">
  <script defer src="/css/main.js?v=10"></script>
  <link rel="stylesheet" href="assets/style.css?v=3" />

  <style>
    .opt{font-size:.85em;opacity:.75;font-weight:600}

/* PDF üst bar (yatay) */
#pdfHintArea.pdf-hint-row{
  display:flex;
  align-items:center;
  justify-content:flex-start;
  gap:12px;
  width:100%;
  flex-wrap:wrap;
}
#pdfHintArea .pdf-action-buttons{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
}
#pdfHintArea .pdf-arrow{
  width:auto;
  margin:0;
  transform:none;
  justify-content:center;
  align-items:center;
  animation: pdfArrowSlide 1.05s ease-in-out infinite;
}
#pdfHintArea .down-arrow{
  animation:none;
  transform: rotate(-90deg);
}
@keyframes pdfArrowSlide{
  0%,100%{ transform: translateX(0); opacity:1; }
  50%{ transform: translateX(10px); opacity:.98; }
}



/* Mobil: ok + PDF yükleme butonu yan yana kalsın */
@media (max-width: 640px){
  #pdfHintArea.pdf-hint-row{
    display:grid;
    grid-template-columns:auto 1fr;
    grid-template-rows:auto auto;
    align-items:center;
    justify-content:stretch;
    gap:10px 6px;
  }
  #pdfHintArea .pdf-hint-text{
    grid-column:1 / -1;
    width:100%;
  }
  #pdfHintArea .pdf-arrow{
    grid-column:1;
    grid-row:2;
    justify-content:flex-start;
    align-self:flex-start;
    position:relative;
    left:-8px;
    top:-6px;
  }
  #pdfHintArea .pdf-action-buttons{
    grid-column:2;
    grid-row:2;
    justify-content:flex-start;
    width:100%;
  }
}


/* PDF ok animasyonu */
.pdf-arrow{
  width:100%;
  display:flex;
  justify-content:center;
  margin-bottom:12px; /* butona değmesin */
  transform: translateX(-1px); /* 5-6 adım sola */
  display:flex;
  justify-content:center;
  align-items:center;
  pointer-events:none;
  user-select:none;
}
.down-arrow{
    display:block;
  margin:0 auto;
width:56px;
  height:56px;
  filter: drop-shadow(0 10px 18px rgba(0,0,0,.28));
  animation: pdfArrowBounce 1.05s ease-in-out infinite;
}
@keyframes pdfArrowBounce{
  0%,100%{ transform: translateY(0) scale(1); opacity:1; }
  50%{ transform: translateY(10px) scale(1.03); opacity:.98; }
}
  
    /* PDF yüklendi durumu */
    .pdf-done{
      width:100%;
      max-width:360px;
      /* Devam Et butonundan biraz ayrışsın */
      margin:10px auto 14px;
      padding:12px 12px;
      border-radius:16px;
      border:1px solid rgba(255,255,255,.18);
      background:rgba(34,197,94,.10);
      box-shadow:0 10px 30px rgba(0,0,0,.18);
      display:flex;
      flex-direction:column;
      align-items:center;
      gap:10px;
      text-align:center;
    }
    .pdf-done .muted{opacity:.85;font-size:.92em}
    .checkmark{width:56px;height:56px;display:block;filter:drop-shadow(0 8px 18px rgba(0,0,0,.18));}
    .checkmark__circle{stroke:#22c55e;stroke-width:4;stroke-dasharray:166;stroke-dashoffset:166;animation:pdfStroke .6s ease-out forwards;}
    .checkmark__check{stroke:#22c55e;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:48;stroke-dashoffset:48;animation:pdfStroke .35s .55s ease-out forwards;}
    @keyframes pdfStroke{to{stroke-dashoffset:0}}
    @keyframes pdfPop{0%{transform:scale(.92)} 60%{transform:scale(1.05)} 100%{transform:scale(1)}}
    .checkmark-wrap{animation:pdfPop .6s ease-out .1s both;}
  
    /* Puanlar & Başarı Sıraları: her metin kutusu üst başlık */
    .scoreGrid .scoreItem{display:flex;flex-direction:column;gap:6px;min-width:0}
    .scoreGrid .scoreTitle{font-weight:700;font-size:13px;line-height:1.15}
    .scoreGrid .scoreItem input{width:100%}

	
/* Sayfanın ortası */
.logo-center{
  width:100%;
  display:flex;
  justify-content:center;
}

/* Logo alanı */
.logo-wrap{
  position:relative;
  display:inline-block;
}

/* Logo banner gibi büyümesin */
.logo{
  display:block;
  width:320px;     /* istersen 280-360 arası */
  max-width:90vw;
  height:auto;
}

/* Kalp boyutu tek yerden */
:root{
  --heart-size: 80px; /* daha ufak istiyorsan 70px yap */
}

/* Kalp rozeti */
.heart-badge{
  position:absolute;
  left: 62%;   /* sola almak için 55% deneyebilirsin */
  top: 58%;
  width: var(--heart-size);
  height: var(--heart-size);
  transform: translate(-50%, -50%) rotate(-12deg); /* hafif sola yatık */
  z-index: 10;
}

/* SVG kalp */
.heart-svg{
  width:100%;
  height:100%;
  display:block;
  filter: drop-shadow(0 10px 18px rgba(0,0,0,.25));
}

.heart-svg path{
  fill:#ff2d55;
}

/* Yazı kesin görünsün */
.heart-text{
  position:absolute;
  inset:0;
  display:flex;
  align-items:center;
  justify-content:center;
  text-align:center;

  color:#fff;
  font-weight:800;
  line-height:1.05;
  letter-spacing:.2px;
  font-family:"Trebuchet MS","Segoe UI",Arial,sans-serif;
  font-size: 13px;

  text-shadow:0 2px 10px rgba(0,0,0,.35);
  z-index: 20;
  pointer-events:none;
}





/* Mobil: TYT/AYT test satırları dar ekranda alt alta hizalansın */
@media (max-width: 640px){
  details.section .tableHead{display:none !important;}
  details.section .content .row{
    display:grid !important;
    grid-template-columns:1fr !important;
    gap:10px !important;
    align-items:stretch !important;
  }
  details.section .content .row .mini{min-width:0;}
  details.section .content .row .mini label{
    display:block;
    margin:0 0 6px;
    font-weight:800;
    font-size:12.5px;
    line-height:1.1;
  }
  details.section .content .row .mini input{
    width:100% !important;
  }
  details.section .content .row .net{
    width:100% !important;
    text-align:left !important;
    justify-self:stretch !important;
  }
}


/* === Daha belirgin metin kutuları (override) === */
#yksForm input:not([type="file"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]),
#yksForm select,
#yksForm textarea{
  -webkit-appearance:none;
  appearance:none;
  width:100%;
  box-sizing:border-box;
  background:#fff;
  border:2px solid rgba(0,0,0,.28);
  border-radius:14px;
  padding:11px 12px;
  font-size:15px;
  font-weight:600;
  line-height:1.2;
  box-shadow: 0 1px 0 rgba(0,0,0,.05), 0 8px 18px rgba(0,0,0,.06);
  transition: border-color .15s ease, box-shadow .15s ease;
}

#yksForm input::placeholder,
#yksForm textarea::placeholder{
  color: rgba(0,0,0,.45);
  font-weight:500;
}

#yksForm input:focus,
#yksForm select:focus,
#yksForm textarea:focus{
  outline:none;
  border-color: rgba(0,0,0,.55);
  box-shadow: 0 0 0 4px rgba(255, 210, 80, .35), 0 10px 22px rgba(0,0,0,.10);
}

#yksForm input:disabled,
#yksForm select:disabled,
#yksForm textarea:disabled{
  opacity:.72;
  background: rgba(0,0,0,.03);
  cursor:not-allowed;
}

/* Doğru/Yanlış mini kutular: düzen bozulmasın, daha net görünsün */
details.section .content .row .mini input{
  text-align:center;
  padding:10px 8px;
}

@media (max-width: 640px){
  #yksForm input:not([type="file"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]),
  #yksForm select,
  #yksForm textarea{
    font-size:16px; /* mobilde okunurluk */
  }
}



/* donuk görünüm */
#yksLockSet:disabled{
  opacity:1;
  filter:none;
}
#yksForm input:disabled,
#yksForm select:disabled,
#yksForm textarea:disabled{
  background:#f2f2f2 !important;
  cursor:not-allowed !important;
}
label#pdfUploadLabel.disabled{
  opacity:1;
  filter:none;
  pointer-events:none;
}
button:disabled{
  opacity:1;
  filter:none;
  cursor:not-allowed;
}

.pdf-rights-notice{
  width:100%;
  margin:0 0 14px;
  padding:14px 16px;
  border-radius:14px;
  border:1px solid #bae6fd;
  background:#eff6ff;
  color:#0f172a;
  line-height:1.5;
  font-size:14px;
}
.pdf-rights-notice.success{border-color:#86efac;background:#ecfdf3;color:#14532d}
.pdf-rights-notice.warning{border-color:#fcd34d;background:#fffbeb;color:#78350f}
.pdf-rights-notice.danger{border-color:#fca5a5;background:#fff1f2;color:#991b1b}
.pdf-rights-notice b{font-weight:900}
.pdf-rights-notice a{display:inline-block;margin-top:8px;font-weight:900;color:inherit;text-decoration:underline}
.pdf-rights-notice .pdf-buy-more-link{
  margin-top:12px;
  padding-top:10px;
  border-top:1px solid currentColor;
  border-top-color:rgba(15,23,42,.16);
}
.pdf-rights-notice .pdf-buy-more-link a{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  margin-top:0;
  padding:9px 12px;
  border:1px solid currentColor;
  border-radius:11px;
  background:rgba(255,255,255,.72);
  text-decoration:none;
  font-weight:900;
}

</style>

<style id="mobil-pdf-form-fix-20260711">
/* === 2026-07-11 MOBİL ÜST FORM VE PDF ALANI DÜZELTMESİ === */
#pdfHintArea.pdf-is-done .pdf-hint-text::after{
  content:" • Yeni PDF yüklemek için düğmeyi tekrar kullanabilirsiniz.";
  font-weight:700;
}
#pdfHintArea .pdf-replace-ready{
  display:inline-flex !important;
}

@media (max-width:640px){
  /* Harici CSS'deki yükseklik/taşma/flex kuralları bu alanı gizleyemesin. */
  .tr-step-page .card{
    overflow:visible !important;
    height:auto !important;
    max-height:none !important;
  }
  .tr-step-page .card > .progress{
    display:flex !important;
    flex-direction:column !important;
    align-items:stretch !important;
    justify-content:flex-start !important;
    gap:12px !important;
    width:100% !important;
    height:auto !important;
    min-height:0 !important;
    max-height:none !important;
    overflow:visible !important;
    padding:12px !important;
    position:relative !important;
  }
  .tr-step-page .card > .progress > .actions{
    display:block !important;
    flex:0 0 auto !important;
    width:100% !important;
    min-width:0 !important;
    max-width:none !important;
    height:auto !important;
    max-height:none !important;
    overflow:visible !important;
    position:relative !important;
    inset:auto !important;
    transform:none !important;
    visibility:visible !important;
    opacity:1 !important;
  }
#pdfHintArea.pdf-hint-row{
    display:flex !important;
    flex-direction:column !important;
    align-items:stretch !important;
    gap:10px !important;
    width:100% !important;
    height:auto !important;
    max-height:none !important;
    overflow:visible !important;
  }
  #pdfHintArea .pdf-hint-text{
    display:block !important;
    width:100% !important;
    grid-column:auto !important;
    color:#111827 !important;
    font-size:15px !important;
    text-align:center !important;
  }
  #pdfHintArea .pdf-arrow{
    display:flex !important;
    width:100% !important;
    grid-column:auto !important;
    grid-row:auto !important;
    left:auto !important;
    top:auto !important;
    align-self:center !important;
    justify-content:center !important;
    margin:0 !important;
    transform:none !important;
  }
  #pdfHintArea .down-arrow{
    width:46px !important;
    height:46px !important;
    transform:none !important;
  }
  #pdfHintArea .pdf-action-buttons{
    display:grid !important;
    grid-template-columns:1fr !important;
    gap:9px !important;
    width:100% !important;
    grid-column:auto !important;
    grid-row:auto !important;
  }
  #pdfHintArea .pdf-action-buttons > *{
    display:flex !important;
    width:100% !important;
    min-height:48px !important;
    align-items:center !important;
    justify-content:center !important;
    margin:0 !important;
    text-align:center !important;
    white-space:normal !important;
  }
  #pdfDoneArea.pdf-done{
    display:none;
    width:100% !important;
    max-width:none !important;
    height:auto !important;
    max-height:none !important;
    overflow:visible !important;
    margin:10px 0 12px !important;
  }
  #pdfDoneArea.pdf-done[style*="flex"]{
    display:flex !important;
  }
  .pdf-headings,
  .pdf-headings h2{
    width:100% !important;
    max-width:100% !important;
    height:auto !important;
    overflow:visible !important;
    white-space:normal !important;
  }
  .pdf-headings h2{
    font-size:20px !important;
    line-height:1.3 !important;
  }

  /* Daha önce PDF/form verisi olsa da asıl bilgi formu her zaman görünür kalsın. */
  #yksForm,
  #yksLockSet{
    display:block !important;
    width:100% !important;
    height:auto !important;
    min-height:1px !important;
    max-height:none !important;
    overflow:visible !important;
    visibility:visible !important;
    opacity:1 !important;
    position:relative !important;
    transform:none !important;
  }
  #yksLockSet:disabled{
    display:block !important;
    opacity:1 !important;
    filter:none !important;
    visibility:visible !important;
  }
}

</style>

<style>
/* === PDF OCR yükleniyor uyarısı === */
#pdfLoadingOverlay{
  position:fixed;
  inset:0;
  z-index:9999999;
  display:none;
  align-items:center;
  justify-content:center;
  padding:18px;
  background:rgba(0,0,0,.62);
}
#pdfLoadingOverlay .pdf-loading-box{
  width:min(460px, 94vw);
  background:#fff;
  color:#111;
  border-radius:20px;
  padding:22px 20px;
  box-shadow:0 24px 70px rgba(0,0,0,.35);
  text-align:center;
  border:1px solid rgba(0,0,0,.08);
}
#pdfLoadingOverlay .pdf-loader{
  width:54px;
  height:54px;
  margin:0 auto 14px;
  border-radius:50%;
  border:6px solid rgba(0,0,0,.12);
  border-top-color:#111;
  animation:pdfSpin .85s linear infinite;
}
@keyframes pdfSpin{to{transform:rotate(360deg)}}
#pdfLoadingOverlay h3{
  margin:0 0 8px;
  font-size:20px;
  font-weight:900;
}
#pdfLoadingOverlay p{
  margin:7px 0;
  line-height:1.45;
  font-size:14px;
}
#pdfLoadingOverlay .pdf-loading-warn{
  background:rgba(255,210,80,.45);
  border:1px dashed rgba(0,0,0,.25);
  border-radius:14px;
  padding:10px;
  font-weight:800;
}
#pdfLoadingOverlay .pdf-loading-file{
  word-break:break-word;
  font-size:13px;
  opacity:.82;
}
#pdfLoadingOverlay .pdf-loading-time{
  font-weight:900;
}
</style>

<style>

  /* Index sayfasıyla aynı üst/alt kurumsal görünüm. */
  .site-chrome,
  .site-footer-frame{
    --tr-brand:#0A2540;
    --tr-brand2:#123B6B;
    --tr-ink:#0b1220;
    --tr-muted:#475569;
    --tr-section:#F3F4F6;
    --tr-line:rgba(10,37,64,.12);
    --tr-shadow2:0 8px 22px rgba(15,23,42,.08);
    --tr-container:1180px;
    color:var(--tr-ink);
    font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial,"Noto Sans","Helvetica Neue",sans-serif;
  }
  .site-chrome *, .site-footer-frame *{box-sizing:border-box}
  .site-chrome a, .site-footer-frame a{color:inherit;text-decoration:none}
  .site-chrome img{max-width:100%;height:auto}
  .site-chrome .container, .site-footer-frame .container{width:min(var(--tr-container),calc(100% - 32px));margin:0 auto}
  .site-chrome .topbar{position:relative;z-index:50;backdrop-filter:blur(12px);background:rgba(255,255,255,.92);border-bottom:1px solid var(--tr-line)}
  .site-chrome .topbar-inner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 0}
  .site-chrome .brand{display:flex;align-items:center;gap:12px;min-width:220px}
  .site-chrome .brand-logo{display:block;width:250px;height:100px;object-fit:contain;filter:drop-shadow(0 10px 18px rgba(11,42,91,.18))}
  .site-chrome .social{margin-left:auto;display:flex;align-items:center;gap:10px}
  .site-chrome .social a{width:38px;height:38px;border-radius:999px;display:grid;place-items:center;border:1px solid var(--tr-line);background:rgba(255,255,255,.75);box-shadow:0 8px 18px rgba(15,23,42,.06);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
  .site-chrome .social a:hover{transform:translateY(-2px);border-color:rgba(11,42,91,.25);box-shadow:0 12px 28px rgba(15,23,42,.10)}
  .site-chrome .social svg{width:18px;height:18px;fill:var(--tr-ink);opacity:.9}
  .site-chrome .nav{position:relative;z-index:40;background:rgba(255,255,255,.96);backdrop-filter:blur(10px);border-bottom:1px solid var(--tr-line)}
  .site-chrome .nav-inner{display:flex;align-items:center;justify-content:flex-start;padding:10px 0}
  .site-chrome .hamburger{display:none;border:1px solid var(--tr-line);background:rgba(255,255,255,.9);border-radius:12px;padding:10px 12px;font-weight:700;color:var(--tr-ink);cursor:pointer}
  .site-chrome .menu{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
  .site-chrome .menu a{padding:10px 12px;border-radius:999px;color:var(--tr-muted);border:1px solid transparent;transition:all .18s ease;font-weight:600}
  .site-chrome .menu a:hover{color:var(--tr-ink);background:rgba(11,42,91,.06);border-color:rgba(11,42,91,.18)}
  .site-chrome .mobile-cta{display:none}
  .site-chrome .mobile-cta-inner{display:grid;grid-template-columns:1fr;gap:10px}
  .site-chrome .btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:12px 16px;border-radius:14px;border:1px solid transparent;font-weight:900;letter-spacing:.2px;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease;user-select:none}
  .site-chrome .btn:hover{transform:translateY(-2px)}
  .site-chrome .btn-orange{display:flex!important;flex-direction:column!important;justify-content:center!important;align-items:center!important;text-align:center!important;line-height:1.15!important;gap:4px;background:linear-gradient(135deg,#d97706,#b45309);color:#fff;border:1px solid rgba(255,255,255,.14);box-shadow:0 16px 34px rgba(217,119,6,.22)}
  .site-chrome .btn-sub{font-size:12px;opacity:.92}
  .site-chrome .mobile-whatsapp{display:flex;justify-content:center;margin:10px 0 6px}
  .site-chrome .mobile-whatsapp .whatsapp-card{display:block;width:100%;max-width:560px}
  .site-chrome .mobile-whatsapp img{display:block;width:100%;border-radius:16px;border:1px solid var(--tr-line);box-shadow:var(--tr-shadow2)}
  footer.site-footer-frame{margin-top:26px;padding:22px 0 26px;background:var(--tr-section);border-top:1px solid var(--tr-line)}
  .site-footer-frame .footer-links{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center;justify-content:center;padding-bottom:14px;border-bottom:1px solid var(--tr-line)}
  .site-footer-frame .footer-links a{color:rgba(10,37,64,.86);font-weight:800;font-size:13px;padding:8px 10px;border-radius:12px;border:1px solid transparent}
  .site-footer-frame .footer-links a:hover{background:rgba(255,255,255,.80);border-color:var(--tr-line)}
  .site-footer-frame .footer-meta{padding-top:14px;text-align:center}
  .site-footer-frame .footer-brand{font-weight:900;color:rgba(10,37,64,.88);margin-bottom:6px}
  .site-footer-frame .copyright{color:rgba(11,18,32,.60);font-weight:800;font-size:12px}
  .to-top{position:fixed;right:16px;bottom:16px;z-index:99990;width:48px;height:48px;border-radius:999px;border:1px solid rgba(11,42,91,.22);background:rgba(255,255,255,.92);box-shadow:0 16px 34px rgba(15,23,42,.14);display:none;cursor:pointer;font-size:18px;color:#0A2540}
  .to-top.show{display:grid;place-items:center}
  .floating-whatsapp{position:fixed;right:18px;bottom:92px;z-index:99999;width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#25D366;box-shadow:0 10px 25px rgba(0,0,0,.25);transition:transform .2s ease,box-shadow .2s ease;text-decoration:none}
  .floating-whatsapp:hover{transform:translateY(-2px) scale(1.04);box-shadow:0 14px 30px rgba(0,0,0,.30)}
  .floating-whatsapp svg{width:34px;height:34px;fill:#fff;display:block}
  @media(max-width:820px){
    .site-chrome .topbar-inner{flex-wrap:nowrap!important;gap:10px}
    .site-chrome .brand{min-width:0;flex:0 1 auto}
    .site-chrome .brand-logo{width:170px;height:auto;max-height:72px}
    .site-chrome .social{flex:0 0 auto;gap:6px}
    .site-chrome .social a{width:34px;height:34px}
    .site-chrome .social svg{width:16px;height:16px}
    .site-chrome .hamburger{display:inline-flex}
    .site-chrome .menu{display:none;width:100%;padding:10px 0 4px}
    .site-chrome .menu.open{display:flex}
    .site-chrome .nav-inner{flex-wrap:wrap}
    .site-chrome .mobile-cta{display:block;padding:12px 0 0;background:#fff}
  }
  @media(max-width:480px){
    .site-chrome .container,.site-footer-frame .container{width:min(var(--tr-container),calc(100% - 20px))}
    .site-chrome .brand-logo{width:142px}
    .site-chrome .social{gap:4px}
    .site-chrome .social a{width:30px;height:30px}
    .site-chrome .social svg{width:14px;height:14px}
    .floating-whatsapp{width:58px;height:58px;right:14px;bottom:84px}
    .floating-whatsapp svg{width:30px;height:30px}
  }

  body.tr-step-page{margin:0;background:#fff}
  .tr-step-page>.wrap{margin-top:20px}



  /* 2026-07-11: index ile birebir üst reklam/menü birleşimi düzeltmesi */
  .site-chrome{
    display:block!important;
    width:100%!important;
    margin:0!important;
    padding:0!important;
    background:#fff!important;
  }
  .site-chrome .topbar{
    margin:0!important;
    padding:0!important;
    border:0!important;
    box-shadow:none!important;
    background:#fff!important;
  }
  .site-chrome .topbar-inner{
    display:grid!important;
    grid-template-columns:250px minmax(320px, 1fr) auto!important;
    align-items:center!important;
    gap:18px!important;
    min-height:110px!important;
    padding:8px 0!important;
  }
  .site-chrome .brand{
    min-width:0!important;
    margin:0!important;
    padding:0!important;
  }
  .site-chrome .brand-logo{
    width:250px!important;
    height:100px!important;
    max-width:100%!important;
    object-fit:contain!important;
  }
  .site-chrome .topbar-ad{
    display:flex!important;
    align-items:center!important;
    justify-content:center!important;
    min-width:0!important;
    margin:0!important;
    padding:0!important;
  }
  .site-chrome .topbar-ad-link{
    display:block!important;
    width:100%!important;
    max-width:728px!important;
    line-height:0!important;
  }
  .site-chrome .topbar-ad-img{
    display:block!important;
    width:100%!important;
    height:auto!important;
    max-height:90px!important;
    object-fit:contain!important;
    margin:0!important;
    padding:0!important;
  }
  .site-chrome .mobile-top-ad{display:none!important}
  .site-chrome .nav{
    display:block!important;
    margin:0!important;
    padding:0!important;
    border:0!important;
    box-shadow:none!important;
    background:#fff!important;
  }
  .site-chrome .nav-inner{
    min-height:50px!important;
    margin:0!important;
    padding:0!important;
  }
  .site-chrome .menu{
    margin:0!important;
    padding:0!important;
  }
  .site-chrome .menu a{
    margin:0!important;
  }
  footer.site-footer-frame{
    display:block!important;
    visibility:visible!important;
    opacity:1!important;
    clear:both!important;
    position:relative!important;
    z-index:20!important;
    margin-top:0!important;
    background:#f3f4f6!important;
    color:#0a2540!important;
  }
  .site-footer-frame .footer-meta,
  .site-footer-frame .footer-brand,
  .site-footer-frame .copyright{
    display:block!important;
    visibility:visible!important;
    opacity:1!important;
  }
  .site-footer-frame .footer-brand{
    color:#0a2540!important;
    font-weight:900!important;
  }
  .site-footer-frame .copyright{color:#475569!important}

  /* Menüden sonra içerik doğrudan başlasın. */
  .tr-ai-page>.page{
    margin-top:0!important;
    padding-top:0!important;
  }
  .tr-step-page>.wrap{
    margin-top:0!important;
    padding-top:0!important;
  }
  .tr-step-page>.wrap>.topbar,
  .tr-step-page>.logo-center{
    display:none!important;
    height:0!important;
    min-height:0!important;
    margin:0!important;
    padding:0!important;
    border:0!important;
  }
  /* Sabit Devam Et çubuğu footer marka yazısını kapatmasın. */
  .tr-step-page footer.site-footer-frame{padding-bottom:120px!important}

  @media(max-width:820px){
    .site-chrome .topbar-inner{
      display:flex!important;
      min-height:0!important;
      padding:6px 0!important;
      gap:8px!important;
    }
    .site-chrome .brand-logo{
      width:170px!important;
      height:auto!important;
      max-height:72px!important;
    }
    .site-chrome .topbar-ad{display:none!important}
    .site-chrome .mobile-top-ad{
      display:block!important;
      width:100%!important;
      margin:0!important;
      padding:0!important;
      background:#fff!important;
      border:0!important;
    }
    .site-chrome .mobile-top-ad-inner{
      display:flex!important;
      justify-content:center!important;
      align-items:center!important;
      margin:0!important;
      padding:0!important;
      line-height:0!important;
    }
    .site-chrome .mobile-top-ad-link{
      display:block!important;
      width:100%!important;
      max-width:728px!important;
      line-height:0!important;
    }
    .site-chrome .mobile-top-ad-img{
      display:block!important;
      width:100%!important;
      height:auto!important;
      margin:0!important;
      padding:0!important;
      object-fit:contain!important;
    }
    .site-chrome .nav-inner{min-height:46px!important}
    .site-chrome .mobile-cta{padding-top:0!important;margin-top:0!important;border:0!important}
    .tr-ai-page>.page{padding-top:0!important}
    .tr-step-page footer.site-footer-frame{padding-bottom:140px!important}
  }

</style>

<style id="tercih-v4-layout-fix">
/* V4: Menü PDF formunun üzerine binmez; tüm üst alan normal belge akışındadır. */
body.tr-step-page{overflow-x:hidden!important;}
.tr-step-page .site-chrome{
  position:relative!important;
  z-index:auto!important;
  display:block!important;
  width:100%!important;
}
.tr-step-page .site-chrome .topbar,
.tr-step-page .site-chrome .nav,
.tr-step-page .site-chrome .nav-inner{
  position:static!important;
  inset:auto!important;
  transform:none!important;
}
.tr-step-page .site-chrome .nav{
  z-index:auto!important;
}
/* Menü ile PDF formu birbirini ezmesin. */
.tr-step-page > .wrap{
  position:relative!important;
  z-index:1!important;
  margin:16px auto 0!important;
  padding-top:0!important;
  clear:both!important;
}
@media (max-width:820px){
  .tr-step-page > .wrap{margin-top:10px!important;}
}
</style>
<!-- TERCIH ROBOTU V6 INDEX-NAV-EXACT -->
<style id="tercih-v6-index-nav-exact">
/* Index sayfasındaki menünün görünümü: iki ince ayırıcı çizgi ve aktif Ana Sayfa kapsülü. */
.site-chrome .nav{
  position:static!important; /* Formların üzerine binmemesi için normal akış korunur. */
  top:auto!important;
  z-index:auto!important;
  margin:0!important;
  padding:0!important;
  background:rgba(255,255,255,.78)!important;
  backdrop-filter:blur(10px)!important;
  -webkit-backdrop-filter:blur(10px)!important;
  border-top:1px solid rgba(10,37,64,.12)!important;
  border-bottom:1px solid rgba(10,37,64,.12)!important;
  box-shadow:none!important;
}
.site-chrome .nav-inner{
  display:flex!important;
  align-items:center!important;
  justify-content:flex-start!important;
  min-height:0!important;
  margin:0!important;
  padding:10px 0!important;
}
.site-chrome .menu{
  display:flex;
  align-items:center;
  flex-wrap:wrap;
  gap:10px!important;
  margin:0!important;
  padding:0!important;
}
.site-chrome .menu a{
  margin:0!important;
  padding:10px 12px!important;
  border:1px solid transparent!important;
  border-radius:999px!important;
  color:#475569!important;
  background:transparent!important;
  box-shadow:none!important;
  font-weight:600!important;
  transition:all .18s ease!important;
}
.site-chrome .menu a:hover{
  color:#0b1220!important;
  background:rgba(11,42,91,.06)!important;
  border-color:rgba(11,42,91,.18)!important;
}
.site-chrome .menu a[aria-current="page"]{
  color:#fff!important;
  background:linear-gradient(135deg,#0A2540,#123B6B)!important;
  border-color:transparent!important;
  box-shadow:0 10px 22px rgba(11,42,91,.18)!important;
}
@media(max-width:820px){
  .site-chrome .nav-inner{
    padding:10px 0!important;
    flex-wrap:wrap!important;
  }
  .site-chrome .menu{
    display:none!important;
    width:100%!important;
    padding:10px 0 4px!important;
  }
  .site-chrome .menu.open{
    display:flex!important;
  }
}
</style>

<style id="tercih-v5-step-footer-space">
/* V5: ia-step1 alt menü bağlantılarından önce nefes alanı. */
.tr-step-page footer.site-footer-frame{
  margin-top:24px!important;
}
.tr-step-page .site-footer-frame .footer-links{
  padding-top:18px!important;
}
</style>


<style id="step1-mobile-desktop-exact-final">
/* Form sayfası ilk çizimde görünür; scroll/reveal beklemez. */
body.tr-step-page .reveal,
body.tr-step-page .reveal.in-view,
body.tr-step-page #yksForm,
body.tr-step-page #yksLockSet,
body.tr-step-page #yksForm .content,
body.tr-step-page #yksForm .content > *{
  opacity:1 !important;
  visibility:visible !important;
  transform:none !important;
  transition:none !important;
}
body.tr-step-page #yksLockSet:disabled,
body.tr-step-page #yksLockSet[disabled],
body.tr-step-page label#pdfUploadLabel.disabled,
body.tr-step-page button:disabled{
  opacity:1 !important;
  filter:none !important;
}
@media(max-width:820px){
  body.tr-step-page .card,
  body.tr-step-page .progress,
  body.tr-step-page #pdfHintArea,
  body.tr-step-page #yksForm,
  body.tr-step-page #yksLockSet{
    opacity:1 !important;
    visibility:visible !important;
    transform:none !important;
    height:auto !important;
    max-height:none !important;
    overflow:visible !important;
  }
}
</style>


<style id="pdf-incognito-theme-fix-20260713">
/* Gizli sekme / koyu tarayıcı teması PDF yükleme alanını değiştirmesin. */
html{
  color-scheme:light !important;
  background:#fff !important;
}
body.tr-step-page{
  --bg:#fff !important;
  --card:#fff !important;
  --card2:#f8fafc !important;
  --text:#111827 !important;
  --muted:#475569 !important;
  --border:rgba(15,23,42,.16) !important;
  --shadow:0 14px 36px rgba(15,23,42,.10) !important;
  color:#111827 !important;
  background:#fff !important;
}

/* Üst PDF ve onay bölümü her tarayıcı modunda aynı görünür. */
body.tr-step-page .card,
body.tr-step-page .card > .progress,
body.tr-step-page .card > .progress > .actions{
  color:#111827 !important;
}
body.tr-step-page .card{
  background:#fff !important;
  border-color:rgba(15,23,42,.14) !important;
  box-shadow:0 14px 36px rgba(15,23,42,.10) !important;
}
body.tr-step-page .card > .progress{
  background:#fff !important;
}
body.tr-step-page .card > .progress > .actions{
  background:transparent !important;
}

body.tr-step-page #pdfHintArea.pdf-hint-row{
  padding:14px !important;
  border:1px solid rgba(15,23,42,.14) !important;
  border-radius:16px !important;
  background:#fff !important;
  box-shadow:0 8px 22px rgba(15,23,42,.07) !important;
  color:#111827 !important;
  opacity:1 !important;
  isolation:isolate;
}
body.tr-step-page #pdfHintArea .pdf-hint-text{
  background:#ffe69a !important;
  color:#111827 !important;
  border-color:rgba(146,64,14,.42) !important;
  opacity:1 !important;
  text-shadow:none !important;
}
body.tr-step-page #pdfHintArea .pdf-arrow,
body.tr-step-page #pdfHintArea .down-arrow{
  opacity:1 !important;
  filter:none !important;
}

/* Butonların rengi CSS değişkenine veya tarayıcı temasına bağlı kalmasın. */
body.tr-step-page #pdfUploadLabel,
body.tr-step-page #pdfUploadLabel.disabled{
  color:#14532d !important;
  background:linear-gradient(180deg,#dcfce7,#bbf7d0) !important;
  border:1px solid #22c55e !important;
  box-shadow:0 7px 18px rgba(34,197,94,.15) !important;
  opacity:1 !important;
  filter:none !important;
  -webkit-text-fill-color:#14532d !important;
}
body.tr-step-page #pdfUploadLabel:not(.disabled){
  cursor:pointer !important;
}
body.tr-step-page #pdfHintArea button.btn.primary{
  color:#fff !important;
  background:linear-gradient(135deg,#6d28d9,#7c3aed) !important;
  border:1px solid #6d28d9 !important;
  box-shadow:0 7px 18px rgba(124,58,237,.18) !important;
  -webkit-text-fill-color:#fff !important;
}
body.tr-step-page #pdfHintArea button.btn.danger{
  color:#991b1b !important;
  background:#fee2e2 !important;
  border:1px solid #ef4444 !important;
  -webkit-text-fill-color:#991b1b !important;
}
body.tr-step-page #pdfHintArea a.btn{
  color:#1e293b !important;
  background:#f8fafc !important;
  border:1px solid #cbd5e1 !important;
  -webkit-text-fill-color:#1e293b !important;
}
body.tr-step-page #pdfHintArea button:disabled,
body.tr-step-page #pdfUploadLabel.disabled{
  cursor:not-allowed !important;
}
body.tr-step-page #pdfHintArea button:disabled{
  color:#475569 !important;
  background:#e2e8f0 !important;
  border-color:#cbd5e1 !important;
  box-shadow:none !important;
  -webkit-text-fill-color:#475569 !important;
}

body.tr-step-page #pdfStatus{
  color:#111827 !important;
  background:#f8fafc !important;
  border-color:#cbd5e1 !important;
  opacity:1 !important;
}


/* PDF yükleme hataları için sayfa içi uyarı kutusu */
body.tr-step-page .pdf-inline-warning{
  display:none;
  width:100%;
  margin:0 0 14px;
  padding:18px;
  border:1px solid #f59e0b;
  border-left:6px solid #dc2626;
  border-radius:16px;
  background:linear-gradient(180deg,#fff7ed,#fff1f2);
  color:#7f1d1d;
  box-shadow:0 12px 30px rgba(127,29,29,.12);
  text-align:left;
  line-height:1.55;
}
body.tr-step-page .pdf-inline-warning.is-visible{display:block}
body.tr-step-page .pdf-inline-warning__title{
  display:flex;
  align-items:flex-start;
  gap:9px;
  margin:0 0 8px;
  color:#991b1b;
  font-size:18px;
  font-weight:900;
}
body.tr-step-page .pdf-inline-warning__message{
  margin:0;
  color:#7f1d1d;
  font-size:15px;
  font-weight:700;
}
body.tr-step-page .pdf-inline-warning__steps-title{
  margin:14px 0 5px;
  color:#7c2d12;
  font-weight:900;
}
body.tr-step-page .pdf-inline-warning__steps{
  margin:6px 0 0 22px;
  padding:0;
  color:#7c2d12;
  font-size:14px;
  font-weight:700;
}
body.tr-step-page .pdf-inline-warning__steps li{margin:5px 0;padding-left:3px}
body.tr-step-page .pdf-inline-warning__rights{
  margin:13px 0 0;
  padding:10px 12px;
  border-radius:11px;
  background:rgba(255,255,255,.72);
  color:#14532d;
  font-size:14px;
  font-weight:900;
}
body.tr-step-page .pdf-inline-warning__support{
  margin:14px 0 8px;
  color:#334155;
  font-size:14px;
  font-weight:800;
}
body.tr-step-page .pdf-inline-warning__whatsapp{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  min-height:46px;
  padding:11px 16px;
  border:1px solid #16a34a;
  border-radius:12px;
  background:#25d366;
  color:#052e16 !important;
  text-decoration:none !important;
  font-size:15px;
  font-weight:900;
  box-shadow:0 8px 18px rgba(37,211,102,.22);
}
body.tr-step-page .pdf-inline-warning__whatsapp:hover{
  transform:translateY(-1px);
  box-shadow:0 11px 22px rgba(37,211,102,.28);
}
@media(max-width:640px){
  body.tr-step-page .pdf-inline-warning{padding:15px;border-radius:14px}
  body.tr-step-page .pdf-inline-warning__title{font-size:16px}
  body.tr-step-page .pdf-inline-warning__whatsapp{display:flex;width:100%}
}
body.tr-step-page #pdfDoneArea.pdf-done{
  color:#14532d !important;
  background:#f0fdf4 !important;
  border:1px solid #86efac !important;
  box-shadow:0 10px 26px rgba(34,197,94,.12) !important;
}
body.tr-step-page #pdfDoneArea,
body.tr-step-page #pdfDoneArea .muted,
body.tr-step-page .pdf-headings,
body.tr-step-page .pdf-headings h2{
  color:#111827 !important;
  opacity:1 !important;
}

@media(max-width:640px){
  body.tr-step-page #pdfHintArea.pdf-hint-row{
    padding:12px !important;
  }
  body.tr-step-page #pdfHintArea .pdf-action-buttons > *{
    min-height:50px !important;
    font-size:14px !important;
  }
}
</style>


</head>
<body class="tr-step-page">
<!-- TERCIH ROBOTU V4 MENU-OVERLAP-FIX -->
<!-- TERCIH ROBOTU UST ALAN - BASLA -->
<div class="site-chrome">
  <div class="topbar">
    <div class="container">
      <div class="topbar-inner">
        <a class="brand" href="/" aria-label="Tercih Robotu Ana Sayfa">
          <img class="brand-logo" src="/css/logo.png" alt="Tercih Robotu Logo" loading="eager">
        </a>


        <div class="topbar-ad" aria-label="Sponsor">
          <a class="topbar-ad-link" href="/ia-step1.php" aria-label="Sponsor - Step 1">
            <img class="topbar-ad-img" src="https://www.tercihrobotu.com.tr/a.png" alt="Sponsor" loading="eager">
          </a>
        </div>
        <div class="social" aria-label="Sosyal Medya">
          <a href="https://www.instagram.com/tercihrobotucom/" target="_blank" rel="noopener" aria-label="Instagram">
            <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M7 2h10a5 5 0 0 1 5 5v10a5 5 0 0 1-5 5H7a5 5 0 0 1-5-5V7a5 5 0 0 1 5-5zm10 2H7a3 3 0 0 0-3 3v10a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3zm-5 4.2A3.8 3.8 0 1 1 8.2 12 3.8 3.8 0 0 1 12 8.2zm0 2A1.8 1.8 0 1 0 13.8 12 1.8 1.8 0 0 0 12 10.2zM17.6 6.7a.8.8 0 1 1-.8-.8.8.8 0 0 1 .8.8z"/></svg>
          </a>
          <a href="https://x.com/tercihrobotucom/" target="_blank" rel="noopener" aria-label="X">
            <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.9 2H22l-6.8 7.8L23 22h-6.7l-5.2-6.4L5.6 22H2l7.3-8.4L1.5 2h6.8l4.7 5.7L18.9 2zm-1.2 18h1.7L6.2 3.9H4.4L17.7 20z"/></svg>
          </a>
          <a href="https://www.youtube.com/user/tercihrobotu/" target="_blank" rel="noopener" aria-label="YouTube">
            <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M21.6 7.2a3 3 0 0 0-2.1-2.1C17.7 4.6 12 4.6 12 4.6s-5.7 0-7.5.5A3 3 0 0 0 2.4 7.2 31.6 31.6 0 0 0 2 12a31.6 31.6 0 0 0 .4 4.8 3 3 0 0 0 2.1 2.1c1.8.5 7.5.5 7.5.5s5.7 0 7.5-.5a3 3 0 0 0 2.1-2.1A31.6 31.6 0 0 0 22 12a31.6 31.6 0 0 0-.4-4.8zM10 15.2V8.8L16 12l-6 3.2z"/></svg>
          </a>
          <a href="https://www.facebook.com/tercihrobotucom/" target="_blank" rel="noopener" aria-label="Facebook">
            <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M13.5 22v-8h2.7l.4-3H13.5V9.1c0-.9.3-1.5 1.6-1.5h1.6V4.9c-.3 0-1.4-.1-2.7-.1-2.7 0-4.6 1.6-4.6 4.6V11H7v3h2.8v8h3.7z"/></svg>
          </a>
        </div>
      </div>
    </div>
  </div>


  <div class="mobile-top-ad" aria-label="Sponsor">
    <div class="container">
      <div class="mobile-top-ad-inner">
        <a class="mobile-top-ad-link" href="/ia-step1.php" aria-label="Sponsor - Step 1">
          <img class="mobile-top-ad-img" src="https://www.tercihrobotu.com.tr/a.png" alt="Sponsor" loading="eager">
        </a>
      </div>
    </div>
  </div>
  <nav class="nav" aria-label="Ana Menü">
    <div class="container">
      <div class="nav-inner">
        <button class="hamburger" id="hamburger" aria-controls="menu" aria-expanded="false">Menü</button>
        <div class="menu" id="menu">
          <a href="/" aria-current="page">Ana Sayfa</a>
          <a href="/universiteler/">Üniversiteler</a>
          <a href="/bolumler/">Bölümler</a>
          <a href="/meslekler/">Meslekler</a>
          <a href="/tercihte-12-kural/">Tercihte 12 Kural</a>
        </div>
      </div>
    </div>
  </nav>


<!-- TERCIH ROBOTU UST ALAN - BITIS -->
<div id="pdfLoadingOverlay" aria-hidden="true">
  <div class="pdf-loading-box" role="status" aria-live="polite">
    <div class="pdf-loader" aria-hidden="true"></div>
    <h3>PDF okunuyor, lütfen bekleyin...</h3>
    <p class="pdf-loading-warn">Bu belge taranmış/resim PDF ise OCR yapılır. İşlem yaklaşık <b>5-25 saniye</b> sürebilir.</p>
    <p>Sayfayı kapatmayın, geri tuşuna basmayın.</p>
    <p class="pdf-loading-time">Geçen süre: <span id="pdfLoadingSeconds">0</span> sn</p>
    <p class="pdf-loading-file" id="pdfLoadingFile"></p>
  </div>
</div>

<div class="logo-center">



    </div>
  </div>
</div>


  <div class="wrap">
    <div class="topbar">
      <div class="title">
	  	
   

    
        
      </div>
      <div class="actions"></div>
    </div>

    <div class="card">
      <div class="progress" style="display:flex;align-items:center;justify-content:flex-start;position:relative;">
        <div class="left" style="position:absolute;left:12px;top:50%;transform:translateY(-50%);">
        </div>
          <div id="pdfRightsNotice" class="pdf-rights-notice <?php echo $ownerUnlimited || $currentPdfAuthorized ? 'success' : ($remainingPdfRights > 0 ? 'warning' : 'danger'); ?>" role="status">
            <?php if ($ownerUnlimited): ?>
              <b>🧪 Yönetici ücretsiz test erişimi açık.</b><br>
              Bu tarayıcıda aynı Sonuç Belgesini dilediğiniz kadar yeniden yükleyebilir; her yüklemeyi ayrı sohbet oturumu olarak kullanabilirsiniz.
              <span id="pdfRightsRemainingText">Kalan yeni PDF yükleme hakkınız: Sınırsız</span>
              <div class="pdf-buy-more-link">
                <a href="/ia-step1.php?owner_exit=1">Yönetici test erişimini kapat</a>
              </div>
            <?php elseif ($currentPdfAuthorized): ?>
              <b>✅ Bu Sonuç Belgesi aktif.</b><br>
              Yapay Zeka Tercih Robotunda bu belgeyle sınırsız soru sorabilirsiniz.
              <span id="pdfRightsRemainingText">Kalan yeni PDF yükleme hakkınız: <?php echo (int)$remainingPdfRights; ?></span>
              <?php if ($remainingPdfRights <= 0): ?><br><b>Yeni bir PDF yüklemek için yeni paket satın almalısınız.</b><?php endif; ?>
            <?php elseif ($remainingPdfRights > 0): ?>
              <b><?php echo $paymentSuccessNotice ? '✅ Ödemeniz onaylandı.' : '📄 Sonuç Belgesi yükleme hakkınız hazır.'; ?></b><br>
              <span id="pdfRightsRemainingText"><?php echo (int)$remainingPdfRights; ?> adet Sonuç Belgesi yükleme hakkınız var.</span>
              PDF başarıyla okunduğunda 1 hak kullanılacaktır.
            <?php else: ?>
              <b>🔒 Sonuç Belgesi yükleme hakkınız yok.</b><br>
              Yeni PDF yüklemek için önce bir paket satın almalısınız.
              <br><a href="/paytr_odeme.php">Sonuç Belgesi Paketi Satın Al</a>
            <?php endif; ?>
            <?php if (!$ownerUnlimited): ?>
              <div class="pdf-buy-more-link">
                <a href="/paytr_odeme.php">＋ Yeni Sonuç Belgesi Hakkı Satın Al</a>
              </div>
            <?php endif; ?>
          </div>
        <div class="actions" style="display:flex;flex-direction:column;align-items:stretch;gap:8px;width:100%;">
          <div style="width:100%;text-align:left;">
            <span class="pill" id="pdfStatus" style="display:none;margin:0 0 8px 0;"></span>
            <div id="pdfInlineWarning" class="pdf-inline-warning" role="alert" aria-live="assertive" aria-atomic="true"></div>
            <div id="pdfHintArea" class="pdf-hint-row">
            <div class="sub pdf-hint-text" style="display:inline-block;font-weight:800;opacity:1;font-size:14px;line-height:1.3;padding:10px 12px;border:1px dashed rgba(0,0,0,.25);border-radius:14px;background:rgba(255, 210, 80, .45);">
              ÖSYM Sonuç Belgenizi Pdf Olarak Yükleyin
            </div>

            <div class="pdf-arrow" aria-hidden="true">
  <svg class="down-arrow" viewBox="0 0 64 64" focusable="false" aria-hidden="true">
    <defs>
      <linearGradient id="pdfArrowGrad" x1="0" y1="0" x2="1" y2="1">
        <stop offset="0%" stop-color="#7c3aed"/>
        <stop offset="100%" stop-color="#06b6d4"/>
      </linearGradient>
    </defs>
    <path d="M32 10v28" fill="none" stroke="url(#pdfArrowGrad)" stroke-width="6" stroke-linecap="round"/>
    <path d="M18 30l14 14 14-14" fill="none" stroke="url(#pdfArrowGrad)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
    <path d="M18 42l14 14 14-14" fill="none" stroke="url(#pdfArrowGrad)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" opacity=".55"/>
  </svg>
</div>



            <div class="pdf-action-buttons">
              <label id="pdfUploadLabel" class="btn success disabled" aria-disabled="true" style="display:inline-flex;align-items:center;gap:8px;">
                📄 PDF YÜKLEMEK İÇİN TIKLAYIN
                <input id="osymPdf" type="file" accept="application/pdf,.pdf" style="display:none" disabled>
              </label>
              <button class="btn primary" type="submit" form="yksForm" disabled>Devam Et</button>
              <button class="btn danger" type="button" id="btnClear" disabled>Temizle</button>
              <a class="btn" href="/">Anasayfa</a>
            </div>
            </div>
            <div id="pdfDoneArea" class="pdf-done" style="display:none;">
              <div class="checkmark-wrap" aria-hidden="true">
                <svg class="checkmark" viewBox="0 0 52 52" focusable="false" aria-hidden="true">
                  <circle class="checkmark__circle" cx="26" cy="26" r="25" fill="none"></circle>
                  <path class="checkmark__check" fill="none" d="M14 27l7 7 17-17"></path>
                </svg>
              </div>
              <div class="pdf-done-text">
  <b>✅ PDF okundu, bilgiler forma aktarıldı!</b> <span id="pdfNameInline">😉</span><br>

  
     <br>  📝 Yapay zeka tercih robotuna geçmeden önce bilgilerini aşağıdaki formdan kontrol edebilirsin.
<br>
			
			<br>
                <span class="muted">Yapay zeka tercih robotuna geçmek için <b>Devam Et</b> butonuna tıkla.</span>
           👉

			 </div>
            </div>

 
            <div class="pdf-headings" style="text-align:center;margin-top:12px;">
            
               <h2>ÖSYM 2026 - YKS Sonuçları (Yerleştirme Puanları Dahil)</h2>
            </div>

          </div>
        </div>

      </div>
      
   

<form id="yksForm" method="post" action="ia-step1.php" autocomplete="on">
      <div id="yksLockSet" data-ia-hard-unlock="1">
        <div class="grid">

          <!-- Basic -->
          <div class="field half">
            <label>Ad Soyad <span class="req">*</span></label>
            <input type="text" name="full_name" placeholder="Ad Soyad" required />
          </div>
          
          <div class="field half">
            <label>E-posta <span class="opt">(İsteğe Bağlı)</span></label>
            <input type="email" name="email" placeholder="ornek@mail.com" />
          </div>

          <div class="field half">
            <label>Telefon <span class="opt">(İsteğe Bağlı)</span></label>
            <input type="text" name="phone" inputmode="tel" placeholder="05xx xxx xx xx" pattern="[0-9+\s()\-]{7,20}" />
          </div>


          <div class="field half">
            <label>T.C. Kimlik No</label>
            <input type="text" name="tckn" inputmode="numeric" pattern="\d{11}" placeholder="11 haneli" />
          </div>
          <div class="field half" style="grid-column:1 / -1;">
            <label>Sınav Yılı</label>
            <input type="number" name="exam_year" min="2026" max="2026" step="1" value="2026" readonly />
          </div>

          <!-- TYT -->
          <details class="section">
            <summary>
              <div>
                <h2>TYT Testleri</h2>

              </div>
              <div class="pill">TYT Net: <span data-section-net="tyt">0.00</span></div>
            </summary>
            <div class="content">
              <div class="tableHead">
                <div>Ders</div><div>Doğru</div><div>Yanlış</div><div style="text-align:center;">Net</div>
              </div>

              <div class="row">
                <div class="mini"><label>Türkçe</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="50" step="1" name="tyt_turkce_d" data-net="tyt_turkce" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="50" step="1" name="tyt_turkce_y" data-net="tyt_turkce" /></div>
                <div class="net" data-net-out="tyt_turkce">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Sosyal Bilimler</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="50" step="1" name="tyt_sosyal_d" data-net="tyt_sosyal" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="50" step="1" name="tyt_sosyal_y" data-net="tyt_sosyal" /></div>
                <div class="net" data-net-out="tyt_sosyal">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Temel Matematik</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="50" step="1" name="tyt_mat_d" data-net="tyt_mat" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="50" step="1" name="tyt_mat_y" data-net="tyt_mat" /></div>
                <div class="net" data-net-out="tyt_mat">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Fen Bilimleri</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="50" step="1" name="tyt_fen_d" data-net="tyt_fen" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="50" step="1" name="tyt_fen_y" data-net="tyt_fen" /></div>
                <div class="net" data-net-out="tyt_fen">0.00</div>
              </div>
            </div>
          </details>

          <!-- AYT -->
          <details class="section">
            <summary>
              <div>
                <h2>AYT Testleri</h2>

              </div>
              <div class="pill">AYT Net: <span data-section-net="ayt">0.00</span></div>
            </summary>
            <div class="content">
              <div class="divider"></div>
              <p class="hint" style="margin:0 0 10px;"><b>TDE – Sosyal Bilimler 1</b></p>

              <div class="tableHead">
                <div>Ders</div><div>Doğru</div><div>Yanlış</div><div style="text-align:center;">Net</div>
              </div>

              <div class="row">
                <div class="mini"><label>TDE</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_tde_d" data-net="ayt_tde" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_tde_y" data-net="ayt_tde" /></div>
                <div class="net" data-net-out="ayt_tde">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Tarih-1</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_tarih1_d" data-net="ayt_tarih1" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_tarih1_y" data-net="ayt_tarih1" /></div>
                <div class="net" data-net-out="ayt_tarih1">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Coğrafya-1</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_cog1_d" data-net="ayt_cog1" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_cog1_y" data-net="ayt_cog1" /></div>
                <div class="net" data-net-out="ayt_cog1">0.00</div>
              </div>

              <div class="divider"></div>
              <p class="hint" style="margin:0 0 10px;"><b>Sosyal Bilimler 2</b></p>

              <div class="row">
                <div class="mini"><label>Tarih-2</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_tarih2_d" data-net="ayt_tarih2" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_tarih2_y" data-net="ayt_tarih2" /></div>
                <div class="net" data-net-out="ayt_tarih2">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Coğrafya-2</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_cog2_d" data-net="ayt_cog2" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_cog2_y" data-net="ayt_cog2" /></div>
                <div class="net" data-net-out="ayt_cog2">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Felsefe Grubu</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_felsefe_d" data-net="ayt_felsefe" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_felsefe_y" data-net="ayt_felsefe" /></div>
                <div class="net" data-net-out="ayt_felsefe">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>DKAB / İlave</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_dkab_d" data-net="ayt_dkab" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_dkab_y" data-net="ayt_dkab" /></div>
                <div class="net" data-net-out="ayt_dkab">0.00</div>
              </div>

              <div class="divider"></div>
              <p class="hint" style="margin:0 0 10px;"><b>Matematik – Fen Bilimleri</b></p>

              <div class="row">
                <div class="mini"><label>Matematik</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_mat_d" data-net="ayt_mat" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_mat_y" data-net="ayt_mat" /></div>
                <div class="net" data-net-out="ayt_mat">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Fizik</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_fizik_d" data-net="ayt_fizik" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_fizik_y" data-net="ayt_fizik" /></div>
                <div class="net" data-net-out="ayt_fizik">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Kimya</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_kimya_d" data-net="ayt_kimya" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_kimya_y" data-net="ayt_kimya" /></div>
                <div class="net" data-net-out="ayt_kimya">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Biyoloji</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_biyo_d" data-net="ayt_biyo" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_biyo_y" data-net="ayt_biyo" /></div>
                <div class="net" data-net-out="ayt_biyo">0.00</div>
              </div>

            </div>
          </details>

          <!-- YDT -->
          <details class="section">
            <summary>
              <div>
                <h2>YDT Testleri</h2>
              </div>
              <div class="pill">YDT Net: <span data-section-net="ydt">0.00</span></div>
            </summary>
            <div class="content">
              <div class="tableHead">
                <div>Ders</div><div>Doğru</div><div>Yanlış</div><div style="text-align:center;">Net</div>
              </div>

              <div class="row">
                <div class="mini"><label>YDT Dili</label><input type="text" name="ydt_dil_adi" placeholder="İngilizce" /></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ydt_dil_d" data-net="ydt_dil" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ydt_dil_y" data-net="ydt_dil" /></div>
                <div class="net" data-net-out="ydt_dil">0.00</div>
              </div>
            </div>
          </details>

          <!-- School / OBP -->
          <details class="section">
            <summary>
              <div>
                <h2>Okul / OBP Bilgileri</h2>

              </div>
              <div class="pill">OBP / Kodlar</div>
            </summary>
            <div class="content">
              <div class="grid">
                <div class="field third">
                  <label>Diploma Notu</label>
                  <input type="number" min="0" max="100" step="0.00001" name="diploma" placeholder="Örn: 92.88430" />
                </div>
                <div class="field third">
                  <label>OBP</label>
                  <input type="number" min="0" max="600" step="0.00001" name="obp" placeholder="Örn: 464.42150" />
                </div>
                <div class="field third">
                  <label>Okul Kodu</label>
                  <input type="text" name="okul_kodu" placeholder="Örn: 520646" />
                </div>
                <div class="field third">
                  <label>Okul Türü Kodu</label>
                  <input type="text" name="okul_tur_kodu" placeholder="Örn: 11058" />
                </div>
                <div class="field third">
                  <label>Alan Kodu</label>
                  <input type="text" name="alan_kodu" placeholder="Örn: 6303" />
                </div>
                <div class="field third">
                  <label>Dal No</label>
                  <input type="text" name="dal_no" placeholder="Örn: -" />
                </div>
              </div>
            </div>
          </details>

          <!-- Scores -->
          <details class="section" open>
            <summary>
              <div>
                <h2>Puanlar & Başarı Sıraları</h2>
                <p class="hint">Sınav /  TYT - AYT - YDT Yerleştirme / Ek Puanlı Yerleştirme</p>
              </div>
              <div class="pill">TYT • SAY • SÖZ • EA • DİL</div>
            </summary>
            <div class="content">

              <div class="scoreRow">
                <div>
                  <b>TYT (Ham)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="sinav_tyt_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="sinav_tyt_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YTYT (Yerleştirme)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="yer_tyt_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="yer_tyt_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YTYT Ek Puan</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">YTYT Ek Puan : 👇</div>
                      <input type="number" step="0.00001" name="ek_tyt_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">YTYT Ek Puan Sırası : 👇</div>
                      <input type="text" name="ek_tyt_sira" placeholder="" />
                    </div>
                  </div>
                </div>
              </div>

              <div class="scoreRow">
                <div>
                  <b>SAY (Ham)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="sinav_say_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="sinav_say_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YSAY (Yerleştirme)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="yer_say_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="yer_say_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YSAY Ek Puan</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">YSAY Ek Puan : 👇</div>
                      <input type="number" step="0.00001" name="ek_say_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">YSAY Ek Puan Sırası : 👇</div>
                      <input type="text" name="ek_say_sira" placeholder="" />
                    </div>
                  </div>
                </div>
              </div>

              <div class="scoreRow">
                <div>
                  <b>SÖZ (Ham)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="sinav_soz_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="sinav_soz_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YSÖZ (Yerleştirme)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="yer_soz_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="yer_soz_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YSÖZ Ek Puan</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">YSÖZ Ek Puan : 👇</div>
                      <input type="number" step="0.00001" name="ek_soz_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">YSÖZ Ek Puan Sırası : 👇</div>
                      <input type="text" name="ek_soz_sira" placeholder="" />
                    </div>
                  </div>
                </div>
              </div>

              <div class="scoreRow">
                <div>
                  <b>EA (Ham)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="sinav_ea_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="sinav_ea_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YEA (Yerleştirme)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="yer_ea_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="yer_ea_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YEA Ek Puan</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">YEA Ek Puan : 👇</div>
                      <input type="number" step="0.00001" name="ek_ea_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">YEA Ek Puan Sırası : 👇</div>
                      <input type="text" name="ek_ea_sira" placeholder="" />
                    </div>
                  </div>
                </div>
              </div>

              <div class="scoreRow">
                <div>
                  <b>DİL (Ham)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="sinav_dil_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="sinav_dil_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YDİL (Yerleştirme)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="yer_dil_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="yer_dil_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YDİL Ek Puan</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">YDİL Ek Puan : 👇</div>
                      <input type="number" step="0.00001" name="ek_dil_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">YDİL Ek Puan Sırası : 👇</div>
                      <input type="text" name="ek_dil_sira" placeholder="" />
                    </div>
                  </div>
                </div>
              </div>

              <div class="divider"></div>

              <div class="grid">
                <div class="field half">
                  <label>Geçen yıl yerleşme durumu</label>
                  <select name="last_year_placement">
                    <option value="">Seçiniz</option>
                    <option value="yerlesmedi">Yerleşmedi</option>
                    <option value="yerlesti">Yerleşti</option>
                  </select>
                </div>
              
              </div>

            </div>
          </details>

        </div>
            </div><!-- /#yksLockSet -->
      </form>
    </div>
  </div>

  <div class="footerBar">
    <div class="footerInner">
      <div class="status">
      
      </div>
      <div style="display:flex;gap:10px;flex-wrap:wrap;">
        <a class="btn" href="/">Anasayfa</a>
        <button class="btn primary" type="submit" form="yksForm">Devam Et</button>
      </div>
    </div>
  </div>

<!-- PDF.js (CDN) -->

<script src="assets/app.js?v=7"></script>
<script>
// PDF doldurma uyumluluk yaması:
// Bazı PDF çıktılarında / eski normalize kodlarında "SÖZ" anahtarı "sozz" gibi üretilebiliyor.
// Bu yüzden TR_SetField'i sarmalayıp alan adlarını güvenli ASCII'ye çeviriyoruz.
(function(){
  if (typeof window.TR_SetField !== "function") return;
  const _orig = window.TR_SetField;

  function _fixName(name){
    name = String(name || "");
    // Birleşik karakterleri ayır + birleşik işaretleri sil (İ -> I + ̇)
    try{
      name = name.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
    }catch(e){}

    // Türkçe harfleri ASCII'ye indir
    name = name
      .replace(/ö/gi, "o")
      .replace(/ı/gi, "i")
      .replace(/ş/gi, "s")
      .replace(/ü/gi, "u")
      .replace(/ğ/gi, "g")
      .replace(/ç/gi, "c");

    // Eski dönüşüm hatası: söz -> sozz
    name = name.replace(/sozz/g, "soz");

    return name;
  }

  window.TR_SetField = function(name, value){
    return _orig.call(this, _fixName(name), value);
  };
})();
</script>
<script src="assets/pdf_fill.js?v=7"></script>


<script>
(function(){
  const lockSet = document.getElementById("yksLockSet");
  const pdfInput = document.getElementById("osymPdf");
  const uploadLabel = document.getElementById("pdfUploadLabel");
  const submitBtn = document.querySelector('button[type="submit"][form="yksForm"]');
  const clearBtn = document.getElementById("btnClear");
  const rightsNotice = document.getElementById("pdfRightsNotice");
  const ownerUnlimited = <?php echo $ownerUnlimited ? 'true' : 'false'; ?>;
  let canUploadNewPdf = <?php echo $canUploadNewPdf ? 'true' : 'false'; ?>;
  let pdfReady = <?php echo $currentPdfAuthorized ? 'true' : 'false'; ?>;
  let remainingRights = <?php echo (int)$remainingPdfRights; ?>;

  function renderRightsNotice(){
    if(!rightsNotice) return;

    const buyMoreHtml = '<div class="pdf-buy-more-link"><a href="/paytr_odeme.php">＋ Yeni Sonuç Belgesi Hakkı Satın Al</a></div>';

    if(ownerUnlimited){
      rightsNotice.className = 'pdf-rights-notice success';
      rightsNotice.innerHTML = '<b>🧪 Yönetici ücretsiz test erişimi açık.</b><br>Bu tarayıcıda aynı Sonuç Belgesini dilediğiniz kadar yeniden yükleyebilir; her yüklemeyi ayrı sohbet oturumu olarak kullanabilirsiniz. Kalan yeni PDF yükleme hakkınız: Sınırsız<div class="pdf-buy-more-link"><a href="/ia-step1.php?owner_exit=1">Yönetici test erişimini kapat</a></div>';
    }else if(pdfReady){
      rightsNotice.className = 'pdf-rights-notice success';
      rightsNotice.innerHTML = '<b>✅ Bu Sonuç Belgesi aktif.</b><br>Yapay Zeka Tercih Robotunda bu belgeyle sınırsız soru sorabilirsiniz. Kalan yeni PDF yükleme hakkınız: ' + remainingRights + (remainingRights <= 0 ? '<br><b>Yeni bir PDF yüklemek için yeni paket satın almalısınız.</b>' : '') + buyMoreHtml;
    }else if(remainingRights > 0){
      rightsNotice.className = 'pdf-rights-notice warning';
      rightsNotice.innerHTML = '<b>📄 Sonuç Belgesi yükleme hakkınız hazır.</b><br>' + remainingRights + ' adet Sonuç Belgesi yükleme hakkınız var. PDF başarıyla okunduğunda 1 hak kullanılacaktır.' + buyMoreHtml;
    }else{
      rightsNotice.className = 'pdf-rights-notice danger';
      rightsNotice.innerHTML = '<b>🔒 Sonuç Belgesi yükleme hakkınız yok.</b><br>Yeni PDF yüklemek için önce bir paket satın almalısınız.' + buyMoreHtml;
    }
  }

  function updateAccessControls(){
    const noUsableAccess = !pdfReady && !canUploadNewPdf;
    const uploadLocked = !canUploadNewPdf;
    const submitLocked = !pdfReady;

    // Bilgi alanları ve açılır bölüm başlıkları hiçbir zaman kilitlenmez.
    // PDF yükleme ve Devam Et butonlarının ödeme/hak kontrolü aynen korunur.
    if(lockSet) lockSet.disabled = false;
    if(pdfInput) pdfInput.disabled = uploadLocked;
    if(submitBtn) submitBtn.disabled = submitLocked;
    if(clearBtn) clearBtn.disabled = noUsableAccess;

    if(uploadLabel){
      uploadLabel.classList.toggle("disabled", uploadLocked);
      uploadLabel.setAttribute("aria-disabled", uploadLocked ? "true" : "false");
      uploadLabel.title = !canUploadNewPdf
        ? 'Yeni PDF yükleme hakkınız kalmadı.'
        : '';
    }
  }

  window.TR_UpdatePdfAccessState = function(balance, ready){
    remainingRights = Math.max(0, parseInt(balance, 10) || 0);
    canUploadNewPdf = ownerUnlimited || remainingRights > 0;
    pdfReady = !!ready;
    renderRightsNotice();
    updateAccessControls();
  };

  renderRightsNotice();
  updateAccessControls();
})();
</script>

<script>
(function(){
  const hintArea = document.getElementById("pdfHintArea");
  const doneArea = document.getElementById("pdfDoneArea");
  const uploadLabel = document.getElementById("pdfUploadLabel");
  const pdfInput = document.getElementById("osymPdf");
  const status = document.getElementById("pdfStatus");
  const btnClear = document.getElementById("btnClear");
  let doneOnce = false;

  function filledCount(){
    const watch = ["tckn","diploma","obp","okul_kodu","okul_tur_kodu","full_name"];
    let c = 0;
    for(const name of watch){
      const el = document.querySelector(`[name="${name}"]`);
      if(el && String(el.value||"").trim() !== "") c++;
    }
    return c;
  }

  function isErrorStatus(txt){
    txt = (txt||"").toLowerCase();
    return txt.includes("hata")
      || txt.includes("error")
      || txt.includes("bulunamad")
      || txt.includes("geçersiz")
      || txt.includes("daha önce yüklenmiş")
      || txt.includes("ikinci kez yüklenemez")
      || txt.includes("yalnızca 2026")
      || txt.includes("yüklenmedi")
      || txt.includes("reddedildi");
  }

  function isSuccessStatus(txt){
    txt = (txt||"").toLowerCase();
    return txt.includes("okundu") || txt.includes("forma aktarıldı") || txt.includes("tamam");
  }

  function scrollToPdfDoneOnMobile(){
    if(!doneArea) return;
    const isMobile = window.matchMedia && window.matchMedia("(max-width: 820px)").matches;
    if(!isMobile) return;

    // Yükleniyor katmanı kapandıktan ve tamamlandı kutusu çizildikten sonra kaydır.
    window.requestAnimationFrame(function(){
      window.setTimeout(function(){
        const stickyOffset = 92;
        const top = doneArea.getBoundingClientRect().top + window.pageYOffset - stickyOffset;
        window.scrollTo({
          top: Math.max(0, top),
          behavior: "smooth"
        });
      }, 220);
    });
  }

  function setDoneUI(){
    if(doneOnce){
      scrollToPdfDoneOnMobile();
      return;
    }
    doneOnce = true;

    // PDF daha önce yüklenmiş olsa bile yükleme alanı ve bilgi formu kaybolmasın.
    // Kullanıcı isterse yeni bir PDF seçip mevcut bilgileri yenileyebilsin.
    if(hintArea) hintArea.classList.add("pdf-is-done");
    if(uploadLabel){
      uploadLabel.style.display = "inline-flex";
      uploadLabel.classList.add("pdf-replace-ready");
      uploadLabel.setAttribute("title", "Başka bir PDF yüklemek için tıklayın");
    }
    if(doneArea) doneArea.style.display = "flex";
    // PDF'den gelen ad soyadı (formdaki full_name) mesajın yanına yaz
    const inlineName = document.getElementById("pdfNameInline");
    const fullNameEl = document.querySelector('[name="full_name"]');
    if(inlineName){
      const v = fullNameEl ? String(fullNameEl.value || "").trim() : "";
      inlineName.textContent = v ? (" " + v) : "";
    }

    scrollToPdfDoneOnMobile();
  }

  function resetPdfUI(){
    doneOnce = false;
    if(hintArea) hintArea.classList.remove("pdf-is-done");
    if(doneArea) doneArea.style.display = "none";
    if(uploadLabel){
      uploadLabel.style.display = "inline-flex";
      uploadLabel.classList.remove("pdf-replace-ready");
      uploadLabel.removeAttribute("title");
    }
    const inlineName = document.getElementById("pdfNameInline");
    if(inlineName) inlineName.textContent = "";
    if(pdfInput) pdfInput.value = "";
    if(status) status.textContent = "";
    if(window.TR_HidePdfInlineWarning) window.TR_HidePdfInlineWarning();
  }

  function tryAutoDone(){
    const txt = status ? (status.textContent || "") : "";
    if(isErrorStatus(txt)) return;

    // Eski form/autofill değerleri PDF yüklenmiş gibi değerlendirilmez.
    // Sadece bu sayfada gerçekten başarılı PDF okuma mesajı oluşursa tamamlandı görünümü açılır.
    if(isSuccessStatus(txt)) setDoneUI();
  }

  // PDF durum yazısı güncellenince yakala
  if(status && window.MutationObserver){
    const obs = new MutationObserver(tryAutoDone);
    obs.observe(status, {childList:true, subtree:true, characterData:true, attributes:true, attributeFilter:["style","class"]});
  }

  // Dosya seçilince kısa süre kontrol et (PDF okuma tamamlanınca alanlar doluyor)
  let pollTimer = null;
  if(pdfInput){
    pdfInput.addEventListener("change", function(){
      if(pollTimer) clearInterval(pollTimer);
      const started = Date.now();
      pollTimer = setInterval(function(){
        tryAutoDone();
        if(doneOnce){ clearInterval(pollTimer); pollTimer = null; return; }
        if(Date.now() - started > 90000){ clearInterval(pollTimer); pollTimer = null; }
      }, 300);
    });
  }

  window.addEventListener("load", tryAutoDone);
  window.addEventListener("yks:pdf-read-success", function(){
    setDoneUI();
  });

  // Temizle'ye basınca PDF alanını da eski haline döndür
  if(btnClear){
    btnClear.addEventListener("click", function(){
      // Diğer temizleme işlemleri bittikten sonra UI'ı resetleyelim
      setTimeout(resetPdfUI, 0);
    });
  }
})();
</script>

<script>
/* DİL / Y-DİL doldurma (server: pdftotext). Sadece boş alanları doldurur. */
(function(){
  const pdfInput = document.getElementById('osymPdf');
  if(!pdfInput) return;

  const pdfInlineWarning = document.getElementById('pdfInlineWarning');

  function hidePdfInlineWarning(){
    if(!pdfInlineWarning) return;
    pdfInlineWarning.classList.remove('is-visible');
    pdfInlineWarning.style.display = 'none';
    pdfInlineWarning.replaceChildren();
  }

  function appendTextElement(tag, className, text){
    const el = document.createElement(tag);
    if(className) el.className = className;
    el.textContent = text;
    return el;
  }

  function showPdfInlineWarning(options){
    if(!pdfInlineWarning) return;
    const opts = options || {};
    pdfInlineWarning.replaceChildren();

    const title = appendTextElement(
      'div',
      'pdf-inline-warning__title',
      '⚠️ ' + String(opts.title || 'PDF yüklenemedi')
    );
    pdfInlineWarning.appendChild(title);

    if(opts.message){
      pdfInlineWarning.appendChild(
        appendTextElement('p', 'pdf-inline-warning__message', String(opts.message))
      );
    }

    if(opts.showSteps){
      pdfInlineWarning.appendChild(
        appendTextElement('div', 'pdf-inline-warning__steps-title', 'Doğru PDF yükleme adımları:')
      );
      const steps = [
        'ÖSYM AİS üzerinden 2026 YKS sonuç belgenizi açın.',
        'Sayfadaki “YKS Sonuç Belgesini Yazdır” seçeneğine tıklayın.',
        'Açılan yazdırma ekranında yazıcı veya hedef bölümünden “PDF olarak kaydet” seçeneğini seçin.',
        'Belgenin tamamını PDF olarak kaydedin. Telefon ekran görüntüsünü PDF’ye çevirerek yüklemeyin.',
        'Oluşan PDF dosyasını bu sayfadan yeniden yükleyin.'
      ];
      const ol = document.createElement('ol');
      ol.className = 'pdf-inline-warning__steps';
      steps.forEach(function(step){
        const li = document.createElement('li');
        li.textContent = step;
        ol.appendChild(li);
      });
      pdfInlineWarning.appendChild(ol);
    }

    if(opts.rightsProtected){
      pdfInlineWarning.appendChild(
        appendTextElement(
          'div',
          'pdf-inline-warning__rights',
          'Bu denemede PDF yükleme hakkınızdan düşülmedi ve açık belgeniz değiştirilmedi.'
        )
      );
    }

    if(opts.showWhatsapp){
      pdfInlineWarning.appendChild(
        appendTextElement(
          'p',
          'pdf-inline-warning__support',
          'Hâlâ PDF yüklemekle alakalı sorun yaşıyorsanız WhatsApp hattımızdan bize ulaşın.'
        )
      );
      const whatsapp = document.createElement('a');
      whatsapp.className = 'pdf-inline-warning__whatsapp';
      whatsapp.href = 'https://wa.me/905368955095?text=' + encodeURIComponent('Merhaba, YKS Sonuç Belgesi PDF yükleme konusunda sorun yaşıyorum.');
      whatsapp.target = '_blank';
      whatsapp.rel = 'noopener';
      whatsapp.textContent = '💬 WhatsApp’tan Destek Al';
      pdfInlineWarning.appendChild(whatsapp);
    }

    pdfInlineWarning.style.display = 'block';
    pdfInlineWarning.classList.add('is-visible');
    window.requestAnimationFrame(function(){
      try{
        pdfInlineWarning.scrollIntoView({behavior:'smooth', block:'center'});
      }catch(_){ }
    });
  }

  window.TR_HidePdfInlineWarning = hidePdfInlineWarning;

  let pdfLoadingTimer = null;

  function showPdfLoading(file){
    hidePdfInlineWarning();
    const ov = document.getElementById('pdfLoadingOverlay');
    const secEl = document.getElementById('pdfLoadingSeconds');
    const fileEl = document.getElementById('pdfLoadingFile');
    const st = document.getElementById('pdfStatus');

    if(st){
      st.style.display = 'inline-block';
      st.textContent = 'PDF yükleniyor ve okunuyor... Taranmış PDF ise hızlı OCR işlemi yaklaşık 5-25 saniye sürebilir.';
    }

    if(fileEl){
      fileEl.textContent = file && file.name ? ('Dosya: ' + file.name) : '';
    }
    if(secEl){
      secEl.textContent = '0';
    }
    if(ov){
      ov.style.display = 'flex';
      ov.setAttribute('aria-hidden', 'false');
    }

    const started = Date.now();
    if(pdfLoadingTimer) clearInterval(pdfLoadingTimer);
    pdfLoadingTimer = setInterval(function(){
      if(secEl){
        secEl.textContent = String(Math.floor((Date.now() - started) / 1000));
      }
    }, 1000);
  }

  function hidePdfLoading(){
    if(pdfLoadingTimer){
      clearInterval(pdfLoadingTimer);
      pdfLoadingTimer = null;
    }
    const ov = document.getElementById('pdfLoadingOverlay');
    if(ov){
      ov.style.display = 'none';
      ov.setAttribute('aria-hidden', 'true');
    }
  }

  function q(name){ return document.querySelector('[name="'+name+'"]'); }

  function setIfEmpty(name, val){
    if(val == null) return;
    const el = q(name);
    if(!el) return;
    // PDF yüklendiğinde alanı gerçekten PDF verisiyle doldur/yenile.
    // Eski sürüm sadece boş alanı dolduruyordu; tarayıcı eski değeri tutunca kullanıcı alanlar dolmadı sanıyordu.
    el.value = val;
    try{
      el.dispatchEvent(new Event('input', {bubbles:true}));
      el.dispatchEvent(new Event('change', {bubbles:true}));
    }catch(e){}
  }

  function toNumberInput(s){
    return String(s || '').replace(/,/g,'.').trim();
  }
  function cleanRank(s){
    return String(s || '').replace(/\s+/g,'').trim();
  }

  function isPdfFile(file){
    if(!file) return false;
    const name = String(file.name || '').toLowerCase();
    const mime = String(file.type || '').toLowerCase();
    return name.endsWith('.pdf') && (mime === '' || mime === 'application/pdf' || mime === 'application/x-pdf');
  }

  async function parseOnServer(file){
    const fd = new FormData();
    fd.append('pdf', file, file.name || 'osym.pdf');

    // Kullanıcı bilgilerini de gönder (DB kaydı için)
    try{
      const fFull = document.querySelector('[name="full_name"]');
      const fTckn = document.querySelector('[name="tckn"]');
      const fPhone = document.querySelector('[name="phone"]');
      const fEmail = document.querySelector('[name="email"]');
      const fYear = document.querySelector('[name="exam_year"]');
      fd.append('full_name', fFull ? (fFull.value||'') : '');
      fd.append('tckn',      fTckn ? (fTckn.value||'') : '');
      fd.append('phone',     fPhone? (fPhone.value||'') : '');
      fd.append('email',     fEmail? (fEmail.value||'') : '');
      fd.append('exam_year', fYear ? (fYear.value||'') : '');
    }catch(e){}

    const url = (location.pathname || '') + '?pdfparse=1';
    const r = await fetch(url, { method:'POST', body: fd });
    const j = await r.json().catch(()=>null);
    if(!r.ok || !j || !j.ok){
      const code = j && j.error ? j.error : ('http_' + r.status);
      const parseError = new Error(code || 'parse_fail');
      parseError.payload = j && typeof j === 'object' ? j : null;
      throw parseError;
    }
    return j;
  }



  // DB'ye kullanıcı bilgilerini güncelle (debounce)
  let _yksSyncTimer = null;
  async function _yksLogSync(){
    const logId = (window.__pdfLogId || null);
    if(!logId) return;
    const fd = new FormData();
    fd.append('log_id', String(logId));
    const fFull = q('full_name');
    const fTckn = q('tckn');
    const fPhone = q('phone');
    const fEmail = q('email');
    const fYear = q('exam_year');
    fd.append('full_name', fFull ? (fFull.value||'') : '');
    fd.append('tckn',      fTckn ? (fTckn.value||'') : '');
    fd.append('phone',     fPhone? (fPhone.value||'') : '');
    fd.append('email',     fEmail? (fEmail.value||'') : '');
    fd.append('exam_year', fYear ? (fYear.value||'') : '');

    const url = (location.pathname || '') + '?logsync=1';
    const r = await fetch(url, { method:'POST', body: fd });
    // Başarısızsa sessiz geç (console'a bas)
    if(!r.ok){ try{ console.warn('logsync http', r.status); }catch(e){}; return; }
    const j = await r.json().catch(()=>null);
    if(!j || !j.ok){ try{ console.warn('logsync fail', j); }catch(e){} }
  }

  function _yksDebouncedSync(){
    if(_yksSyncTimer) clearTimeout(_yksSyncTimer);
    _yksSyncTimer = setTimeout(function(){
      _yksLogSync().catch(()=>{});
    }, 650);
  }

  // Kullanıcı form alanları değişince DB'yi güncelle
  ['full_name','tckn','phone','email','exam_year'].forEach(function(n){
    const el = q(n);
    if(!el) return;
    el.addEventListener('input', _yksDebouncedSync);
    el.addEventListener('change', _yksDebouncedSync);
  });

  pdfInput.addEventListener('change', function(){
    const f = pdfInput.files && pdfInput.files[0];
    if(!f) return;

    const uploadFormSnapshot = {};
    document.querySelectorAll('input[name], select[name], textarea[name]').forEach(function(el){
      if(!el || !el.name || el.type === 'file') return;
      uploadFormSnapshot[el.name] = {
        value: el.value,
        checked: !!el.checked
      };
    });

    const restoreUploadFormSnapshot = function(){
      Object.keys(uploadFormSnapshot).forEach(function(name){
        const el = document.querySelector('[name="' + CSS.escape(name) + '"]');
        const saved = uploadFormSnapshot[name];
        if(!el || !saved) return;
        if(el.type === 'checkbox' || el.type === 'radio'){
          el.checked = !!saved.checked;
        }else{
          el.value = saved.value;
        }
      });
    };

    if(!isPdfFile(f)){
      pdfInput.value = '';
      const st = document.getElementById('pdfStatus');
      if(st){
        st.style.display = 'none';
        st.textContent = '';
      }
      showPdfInlineWarning({
        title: 'PDF dosyası seçilemedi',
        message: 'Yalnızca gerçek PDF dosyaları yüklenebilir.',
        showSteps: true,
        rightsProtected: true,
        showWhatsapp: true
      });
      return;
    }

    showPdfLoading(f);

    setTimeout(async function(){
      try{
        const d = await parseOnServer(f);
        try{
          if(window.TR_UpdatePdfAccessState){
            window.TR_UpdatePdfAccessState(d.remaining_pdf_rights || 0, d.pdf_access_granted === true);
          }
        }catch(e){}
        try{ window.__pdfLogId = d.log_id || null; }catch(e){}
        try{ if(d.log_id){ await _yksLogSync(); } }catch(e){}
        // PDF'den gelen tüm alanları formda boşsa doldur
        const pdfFields = [
          'tckn','full_name','email','exam_year',
          'tyt_turkce_d','tyt_turkce_y','tyt_sosyal_d','tyt_sosyal_y','tyt_mat_d','tyt_mat_y','tyt_fen_d','tyt_fen_y',
          'ayt_tde_d','ayt_tde_y','ayt_tarih1_d','ayt_tarih1_y','ayt_cog1_d','ayt_cog1_y',
          'ayt_tarih2_d','ayt_tarih2_y','ayt_cog2_d','ayt_cog2_y','ayt_felsefe_d','ayt_felsefe_y','ayt_dkab_d','ayt_dkab_y',
          'ayt_mat_d','ayt_mat_y','ayt_fizik_d','ayt_fizik_y','ayt_kimya_d','ayt_kimya_y','ayt_biyo_d','ayt_biyo_y','ydt_dil_adi','ydt_dil_d','ydt_dil_y',
          'diploma','obp','okul_kodu','okul_tur_kodu','alan_kodu','dal_no',
          'sinav_tyt_puan','sinav_tyt_sira','yer_tyt_puan','yer_tyt_sira','ek_tyt_puan','ek_tyt_sira',
          'sinav_say_puan','sinav_say_sira','yer_say_puan','yer_say_sira','ek_say_puan','ek_say_sira',
          'sinav_soz_puan','sinav_soz_sira','yer_soz_puan','yer_soz_sira','ek_soz_puan','ek_soz_sira',
          'sinav_ea_puan','sinav_ea_sira','yer_ea_puan','yer_ea_sira','ek_ea_puan','ek_ea_sira',
          'sinav_dil_puan','sinav_dil_sira','yer_dil_puan','yer_dil_sira','ek_dil_puan','ek_dil_sira'
        ];

        pdfFields.forEach(function(name){
          if(!(name in d)) return;
          let val = d[name];
          if(name.includes('_puan') || name === 'diploma' || name === 'obp') val = toNumberInput(val);
          if(name.includes('_sira')) val = cleanRank(val);
          setIfEmpty(name, val);
        });

        try{ if(d.log_id){ await _yksLogSync(); } }catch(e){}

        if(d.last_year_placement){
          const el = q('last_year_placement');
          if(el){
            el.value = d.last_year_placement;
            el.dispatchEvent(new Event('change', {bubbles:true}));
          }
        }

        try{
          hidePdfInlineWarning();
          const st = document.getElementById('pdfStatus');
          if(st){
            st.style.display='inline-block';
            st.textContent='PDF okundu, bilgiler forma aktarıldı';
          }
          window.dispatchEvent(new CustomEvent('yks:pdf-read-success'));
        }catch(_){}
      }catch(e){
        try{ console.warn('PDF server parse başarısız:', e); }catch(_){}
        try{
          const st = document.getElementById('pdfStatus');
          const rawError = e && e.message ? e.message : String(e || '');
          const payload = e && e.payload && typeof e.payload === 'object' ? e.payload : null;

          let friendlyError = '';
          if(rawError === 'pdf_yukleme_hakki_yok'){
            friendlyError = 'Yeni Sonuç Belgesi yükleme hakkınız kalmadı. Yeni paket satın almalısınız.';
          }else if(rawError === 'ayni_sonuc_belgesi_zaten_yuklu'){
            friendlyError = payload && payload.message
              ? String(payload.message)
              : 'Bu Sonuç Belgesi daha önce yüklenmiş. Aynı belge ikinci kez yüklenemez ve hakkınızdan düşülmedi.';
          }else if(rawError === 'yalnizca_2026_sonuc_belgesi'){
            friendlyError = payload && payload.message
              ? String(payload.message)
              : 'Yalnızca 2026 ÖSYM Sonuç Belgesi yüklenebilir. Belge yüklenmedi, hakkınızdan düşülmedi ve açık belgeniz değiştirilmedi.';
          }else if(rawError === 'gecersiz_yks_sonuc_belgesi'){
            friendlyError = payload && payload.message
              ? String(payload.message)
              : 'Bu PDF geçerli bir 2026 ÖSYM YKS Sonuç Belgesi olarak doğrulanamadı. Dosya yüklenmedi ve hakkınızdan düşülmedi.';
          }else{
            friendlyError = 'PDF yüklendi ama veriler okunamadı: ' + rawError;
          }

          if(st){
            st.style.display='none';
            st.textContent='';
          }

          const isInvalidYks = rawError === 'gecersiz_yks_sonuc_belgesi';
          const isWrongYear = rawError === 'yalnizca_2026_sonuc_belgesi';
          const isDuplicate = rawError === 'ayni_sonuc_belgesi_zaten_yuklu';
          const isNoRight = rawError === 'pdf_yukleme_hakki_yok';

          let warningTitle = 'PDF yüklenemedi';
          let warningMessage = friendlyError;
          let warningSteps = false;
          let warningWhatsapp = false;
          let rightsProtected = false;

          if(isInvalidYks){
            warningTitle = 'YKS SONUÇ BELGENİZ YÜKLENEMEDİ!';
            warningMessage = 'Yüklediğiniz dosya geçerli bir 2026 ÖSYM YKS Sonuç Belgesi olarak doğrulanamadı. Dosya eksik, kırpılmış, ekran görüntüsünden oluşturulmuş veya YKS sonuç belgesi dışında başka bir PDF olabilir.';
            warningSteps = true;
            warningWhatsapp = true;
            rightsProtected = true;
          }else if(isWrongYear){
            warningTitle = 'YKS SONUÇ BELGENİZ YÜKLENEMEDİ!';
            warningMessage = '';
            warningSteps = true;
            warningWhatsapp = true;
            rightsProtected = true;
          }else if(isDuplicate){
            warningTitle = 'Bu sonuç belgesi daha önce yüklenmiş';
            rightsProtected = true;
          }else if(isNoRight){
            warningTitle = 'PDF yükleme hakkınız bulunmuyor';
          }

          showPdfInlineWarning({
            title: warningTitle,
            message: warningMessage,
            showSteps: warningSteps,
            rightsProtected: rightsProtected,
            showWhatsapp: warningWhatsapp
          });

          if(isDuplicate && payload && payload.existing_pdf_url && pdfInlineWarning){
            const link = document.createElement('a');
            link.href = String(payload.existing_pdf_url);
            link.textContent = 'Daha önce yüklenen belge sohbetini aç';
            link.className = 'pdf-inline-warning__whatsapp';
            link.style.marginTop = '12px';
            pdfInlineWarning.appendChild(link);
          }

          if(rawError === 'ayni_sonuc_belgesi_zaten_yuklu'
              || rawError === 'yalnizca_2026_sonuc_belgesi'
              || rawError === 'gecersiz_yks_sonuc_belgesi'){
            restoreUploadFormSnapshot();
            pdfInput.value = '';

          }
        }catch(_){}
      }finally{
        hidePdfLoading();
      }
    }, 250);
  });
})();
</script>

<!-- SAĞ ALT "YUKARI ÇIK" OKU - BAŞLA -->
<style>
  #backToTopBtn{
    position: fixed;
    right: 16px;   /* DEĞİŞTİ: sağa alındı */
    bottom: 16px;
    width: 46px;
    height: 46px;
    border: 0;
    border-radius: 999px;
    cursor: pointer;
    display: none;
    align-items: center;
    justify-content: center;
    background: rgba(0,0,0,.75);
    color: #fff;
    z-index: 999999;
    box-shadow: 0 8px 20px rgba(0,0,0,.25);
    transition: transform .15s ease, opacity .15s ease, background .15s ease;
    opacity: 0;
  }
  #backToTopBtn.show{
    display: flex;
    opacity: 1;
  }
  #backToTopBtn:hover{
    transform: translateY(-2px);
    background: rgba(0,0,0,.85);
  }
  #backToTopBtn svg{ width: 22px; height: 22px; }
</style>

<button id="backToTopBtn" type="button" aria-label="Yukarı çık" title="Yukarı çık">
  <svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
    <path d="M12 5l-7 7 1.4 1.4L11 8.8V20h2V8.8l4.6 4.6L19 12l-7-7z" fill="currentColor"/>
  </svg>
</button>

<script>
  (function(){
    var btn = document.getElementById('backToTopBtn');
    if(!btn) return;

    function toggleBtn(){
      var y = window.pageYOffset || document.documentElement.scrollTop;
      if (y > 300) btn.classList.add('show');
      else btn.classList.remove('show');
    }

    window.addEventListener('scroll', toggleBtn, { passive: true });
    toggleBtn();

    btn.addEventListener('click', function(){
      window.scrollTo({ top: 0, behavior: 'smooth' });
    });
  })();
</script>
<!-- SAĞ ALT "YUKARI ÇIK" OKU - BİTİŞ -->


<script>
(function(){
  const btnClear = document.getElementById('btnClear');
  if(!btnClear) return;

  let clearing = false;

  async function clearAllStepSessions(){
    const body = new URLSearchParams();
    body.set('action', 'clear_all_steps');

    try{
      await fetch(location.pathname || 'step1.php', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
          'X-Requested-With': 'XMLHttpRequest'
        },
        credentials: 'same-origin',
        body: body.toString()
      });
    }catch(e){}
  }

  function clearBrowserStepData(){
    const keys = ['step1','step2','step3','step4','step4_program','step5','selectedPrograms'];

    try{
      for(let i = localStorage.length - 1; i >= 0; i--){
        const k = localStorage.key(i) || '';
        if(keys.some(x => k.indexOf(x) !== -1)) localStorage.removeItem(k);
      }
    }catch(e){}

    try{
      for(let i = sessionStorage.length - 1; i >= 0; i--){
        const k = sessionStorage.key(i) || '';
        if(keys.some(x => k.indexOf(x) !== -1)) sessionStorage.removeItem(k);
      }
    }catch(e){}
  }

  btnClear.addEventListener('click', async function(e){
    if(clearing) return;
    clearing = true;

    e.preventDefault();
    e.stopImmediatePropagation();

    clearBrowserStepData();
    await clearAllStepSessions();

    const target = (location.pathname || 'step1.php') + '?cleared=1';
    window.location.replace(target);
  }, true);
})();
</script>



<!-- AI CHAT YÖNLENDİRME KİLİDİ - BAŞLA -->
<script>
(function(){
  const form = document.getElementById('yksForm');
  if (!form) return;

  const submitButtons = Array.from(
    document.querySelectorAll('button[type="submit"][form="yksForm"]')
  );
  let sendingToAi = false;

  function stopEvent(e){
    if (!e) return;
    e.preventDefault();
    e.stopPropagation();
    if (typeof e.stopImmediatePropagation === 'function') {
      e.stopImmediatePropagation();
    }
  }

  function lockSubmitButtons(){
    submitButtons.forEach(function(btn){
      if (!btn.dataset.aiOriginalText) {
        btn.dataset.aiOriginalText = btn.textContent || 'Devam Et';
      }
      btn.disabled = true;
      btn.setAttribute('aria-disabled', 'true');
      btn.setAttribute('aria-busy', 'true');
      btn.textContent = 'Yönlendiriliyor…';
    });
  }

  async function sendStep1ToAi(e){
    // Her durumda normal form gönderimini önce durdur.
    // Böylece ikinci tıklama eski step2.php akışını asla çalıştıramaz.
    stopEvent(e);

    if (sendingToAi) return false;
    sendingToAi = true;
    lockSubmitButtons();

    let targetUrl = '/ia-tercih-robotu/';

    try {
      const fd = new FormData(form);
      fd.set('ai_submit', '1');

      const response = await fetch((location.pathname || '/ia-step1.php'), {
        method: 'POST',
        body: fd,
        credentials: 'same-origin',
        redirect: 'follow',
        headers: { 'X-Requested-With': 'XMLHttpRequest' }
      });

      // PHP'nin oluşturduğu PDF anahtarlı kesin hedefi koru.
      if (response.redirected && response.url) {
        const redirectedUrl = new URL(response.url, window.location.origin);
        if (redirectedUrl.origin === window.location.origin
            && redirectedUrl.pathname.indexOf('/ia-tercih-robotu/') === 0) {
          targetUrl = redirectedUrl.pathname + redirectedUrl.search + redirectedUrl.hash;
        }
      }
    } catch(err) {
      // Ağ hatasında da eski step2.php akışına düşme; AI sohbet ana sayfasına geç.
    }

    window.location.replace(targetUrl);
    return false;
  }

  // Asıl gönderim yalnız formun submit olayı üzerinden yapılır;
  // tarayıcının required/pattern doğrulamaları korunur.
  form.addEventListener('submit', sendStep1ToAi, true);

  // İlk tıklamadan sonra gelen tüm ek tıklamaları en erken aşamada yut.
  submitButtons.forEach(function(btn){
    btn.addEventListener('click', function(e){
      if (!sendingToAi) return;
      stopEvent(e);
    }, true);
  });
})();
</script>
<!-- AI CHAT YÖNLENDİRME KİLİDİ - BİTİŞ -->


<!-- TERCIH ROBOTU ALT ALAN - BASLA -->
<footer class="site-footer-frame">
  <div class="container">
    <div class="footer-links" aria-label="Alt Menü">
      <a href="/hakkimizda/">Hakkımızda</a>
      <a href="/sikca-sorulan-sorular/">Sıkça Sorulan Sorular</a>
      <a href="/yasal-uyari/">Yasal Uyarı</a>
      <a href="/bize-ulasin/">Bize Ulaşın</a>
      <a href="/ek-tercih-robotu/step1.php">Ek Tercih Robotu</a>
    </div>
    <div class="footer-meta">
      <div class="footer-brand">Tercih Robotu bir Es Eğitim Danışmanlık markasıdır.</div>
      <div class="copyright">Copyright © 2026</div>
    </div>
  </div>
</footer>
<button class="to-top" id="toTop" aria-label="Yukarı çık">↑</button>
<a class="floating-whatsapp" href="https://wa.me/905368955095" target="_blank" rel="noopener" aria-label="WhatsApp ile iletişime geç">
  <svg viewBox="0 0 32 32" aria-hidden="true"><path d="M19.11 17.42c-.28-.14-1.65-.81-1.9-.9-.26-.09-.44-.14-.63.14-.19.28-.72.9-.88 1.09-.16.19-.33.21-.6.07-.28-.14-1.17-.43-2.23-1.37-.82-.73-1.38-1.64-1.54-1.92-.16-.28-.02-.43.12-.57.13-.12.28-.33.42-.49.14-.16.19-.28.28-.46.09-.19.05-.35-.02-.49-.07-.14-.63-1.51-.86-2.07-.23-.54-.46-.47-.63-.48h-.54c-.19 0-.49.07-.74.35-.26.28-.98.95-.98 2.32s1 2.7 1.14 2.88c.14.19 1.96 2.99 4.75 4.19.66.29 1.18.46 1.59.59.67.21 1.27.18 1.75.11.53-.08 1.65-.67 1.88-1.32.23-.65.23-1.2.16-1.32-.07-.12-.26-.19-.53-.33zM16.03 3C8.84 3 3 8.77 3 15.89c0 2.27.6 4.49 1.74 6.44L3 29l6.86-1.78a13.1 13.1 0 0 0 6.17 1.55h.01C23.23 28.77 29 23 29 15.89 29 8.77 23.22 3 16.03 3zm0 23.59h-.01c-1.94 0-3.84-.52-5.5-1.51l-.39-.23-4.07 1.06 1.09-3.94-.26-.4a10.63 10.63 0 0 1-1.68-5.68c0-5.91 4.85-10.71 10.82-10.71 2.89 0 5.61 1.12 7.65 3.14a10.57 10.57 0 0 1 3.17 7.57c0 5.9-4.85 10.7-10.82 10.7z"/></svg>
</a>
<!-- TERCIH ROBOTU ALT ALAN - BITIS -->

<script>
/* TYT / AYT / YDT net hesaplama - yeni eklenen YDT alanları dahil */
(function(){
  if (window.__trGenericNetCalcInstalled) return;
  window.__trGenericNetCalcInstalled = true;

  function toNum(v){
    v = String(v || '').replace(',', '.').trim();
    var n = parseFloat(v);
    return isFinite(n) ? n : 0;
  }
  function fmt(n){
    return (Math.round(n * 100) / 100).toFixed(2);
  }
  function recalcAllNets(){
    var groups = {};
    document.querySelectorAll('[data-net]').forEach(function(el){
      var g = el.getAttribute('data-net') || '';
      if (!g) return;
      if (!groups[g]) groups[g] = {d:0, y:0};
      var name = el.getAttribute('name') || '';
      if (/_d$/.test(name)) groups[g].d += toNum(el.value);
      if (/_y$/.test(name)) groups[g].y += toNum(el.value);
    });

    var sections = {};
    Object.keys(groups).forEach(function(g){
      var net = groups[g].d - (groups[g].y / 4);
      var out = document.querySelector('[data-net-out="' + g + '"]');
      if (out) out.textContent = fmt(net);

      var section = g.split('_')[0];
      sections[section] = (sections[section] || 0) + net;
    });

    Object.keys(sections).forEach(function(section){
      var out = document.querySelector('[data-section-net="' + section + '"]');
      if (out) out.textContent = fmt(sections[section]);
    });
  }

  document.addEventListener('input', function(e){
    if (e.target && e.target.matches && e.target.matches('[data-net]')) recalcAllNets();
  }, true);
  document.addEventListener('change', function(e){
    if (e.target && e.target.matches && e.target.matches('[data-net]')) recalcAllNets();
  }, true);
  window.addEventListener('load', recalcAllNets);
  setTimeout(recalcAllNets, 0);
})();
</script>



<!-- IA STEP1: ONAY/FIELDSET KİLİDİNİ KALICI OLARAK KALDIR - BAŞLA -->
<script>
(function(){
  const lockSet = document.getElementById('yksLockSet');
  if(!lockSet) return;

  function keepFormUnlocked(){
    lockSet.disabled = false;
    lockSet.removeAttribute('disabled');
  }

  // İlk açılışta, tarayıcı geri dönüşünde ve başka bir eski script
  // disabled niteliğini yeniden eklemeye çalışırsa formu açık tut.
  keepFormUnlocked();
  window.addEventListener('pageshow', keepFormUnlocked);

  if(window.MutationObserver){
    new MutationObserver(keepFormUnlocked).observe(lockSet, {
      attributes: true,
      attributeFilter: ['disabled']
    });
  }
})();
</script>
<!-- IA STEP1: ONAY/FIELDSET KİLİDİNİ KALICI OLARAK KALDIR - BİTİŞ -->



<!-- IA STEP1 HARD UNLOCK V4 - BAŞLA -->
<style id="ia-step1-hard-unlock-v4-style">
  #yksForm details.section > summary{
    pointer-events:auto !important;
    cursor:pointer !important;
    user-select:none !important;
    position:relative !important;
    z-index:5 !important;
  }
  #yksForm input:not(#osymPdf),
  #yksForm select,
  #yksForm textarea{
    pointer-events:auto !important;
    opacity:1 !important;
    filter:none !important;
  }
</style>
<script id="ia-step1-hard-unlock-v4-script">
(function(){
  'use strict';

  const BUILD = 'IA_STEP1_BUILD_20260723_HARD_UNLOCK_V4';
  document.documentElement.setAttribute('data-ia-step1-build', BUILD);
  window.__IA_STEP1_BUILD__ = BUILD;

  const form = document.getElementById('yksForm');
  if(!form) return;

  function unlockEditableFields(){
    const lockContainer = document.getElementById('yksLockSet');
    if(lockContainer){
      lockContainer.removeAttribute('disabled');
      try{ lockContainer.disabled = false; }catch(_){ }
    }

    form.querySelectorAll('input:not(#osymPdf), select, textarea').forEach(function(el){
      if(el.disabled){
        el.disabled = false;
        el.removeAttribute('disabled');
      }
    });
  }

  unlockEditableFields();
  window.addEventListener('pageshow', unlockEditableFields);
  window.addEventListener('load', unlockEditableFields);
  window.addEventListener('yks:pdf-read-success', unlockEditableFields);
  document.addEventListener('input', unlockEditableFields, true);
  document.addEventListener('change', unlockEditableFields, true);

  if(window.MutationObserver){
    new MutationObserver(function(mutations){
      let mustUnlock = false;
      for(const mutation of mutations){
        if(mutation.type === 'attributes' && mutation.attributeName === 'disabled'){
          const target = mutation.target;
          if(target && target.id !== 'osymPdf'){
            mustUnlock = true;
            break;
          }
        }
      }
      if(mustUnlock) unlockEditableFields();
    }).observe(form, {
      subtree:true,
      attributes:true,
      attributeFilter:['disabled']
    });
  }

  /*
   * Harici veya eski JavaScript native <details> davranışını engellese bile,
   * bu yakalayıcı yalnızca beş form başlığını doğrudan açıp kapatır.
   */
  document.addEventListener('click', function(event){
    const target = event.target;
    if(!(target instanceof Element)) return;

    const summary = target.closest('#yksForm details.section > summary');
    if(!summary) return;

    const details = summary.parentElement;
    if(!(details instanceof HTMLDetailsElement)) return;

    event.preventDefault();
    event.stopPropagation();
    if(typeof event.stopImmediatePropagation === 'function'){
      event.stopImmediatePropagation();
    }

    details.open = !details.open;
  }, true);

  console.info(BUILD + ' aktif');
})();
</script>
<!-- IA STEP1 HARD UNLOCK V4 - BİTİŞ -->


<script defer src="/css/random-sponsor.js?v=1784829906"></script>
</body>
</html>
