<?php
// GÜVENLİ OTURUM BAŞLATMA
session_start();

// 1. Temel Giriş Kontrolü 
if (!isset($_SESSION['user_id'])) { 
    header("Location: login"); 
    exit; 
}

// 2. Sunucu Tarafı Hareketsizlik Kontrolü (15 Dk) 
$timeout_duration = 900; 
if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity']) > $timeout_duration) {
    session_unset();     
    session_destroy();   
    header("Location: login?reason=timeout"); 
    exit;
}
$_SESSION['last_activity'] = time();
$user_id = $_SESSION['user_id'];

// --- VERİTABANI BAĞLANTISI ---
$host = "localhost"; $dbname = "pue28xcom_rss"; $username = "pue28xcom_user"; $password = "aes1S*#*"; 
try { 
    $db = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(Exception $e) { die("Sistem hatası."); }


// --- AJAX İŞLEMLERİ ---
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
    if ($_POST['action'] === 'save_quick_note') {
        header('Content-Type: application/json');
        $note_content = trim($_POST['content'] ?? '');
        try {
            $stmt = $db->prepare("SELECT id FROM notlar WHERE user_id = ? AND baslik = 'Hızlı Not' LIMIT 1");
            $stmt->execute([$user_id]);
            $existing_note = $stmt->fetch();

            if ($existing_note) {
                $stmt = $db->prepare("UPDATE notlar SET icerik = ?, guncelleme_tarihi = CURRENT_TIMESTAMP WHERE id = ?");
                $stmt->execute([$note_content, $existing_note['id']]);
            } else {
                $stmt = $db->prepare("INSERT INTO notlar (user_id, baslik, icerik) VALUES (?, 'Hızlı Not', ?)");
                $stmt->execute([$user_id, $note_content]);
            }
            echo json_encode(['status' => 'success']);
        } catch(Exception $e) { echo json_encode(['status' => 'error']); }
        exit;
    }

    if ($_POST['action'] === 'load_quick_note') {
        header('Content-Type: application/json');
        try {
            $stmt = $db->prepare("SELECT icerik FROM notlar WHERE user_id = ? AND baslik = 'Hızlı Not' LIMIT 1");
            $stmt->execute([$user_id]);
            $note = $stmt->fetch();
            echo json_encode(['status' => 'success', 'content' => $note['icerik'] ?? '']);
        } catch(Exception $e) { echo json_encode(['status' => 'error']); }
        exit;
    }

    if ($_POST['action'] === 'load_widget_news') {
        header('Content-Type: application/json');
        try {
            $stmt = $db->query("SELECT baslik, kaynak_adi, link FROM haberler ORDER BY yayin_tarihi DESC LIMIT 6");
            $news = $stmt->fetchAll(PDO::FETCH_ASSOC);
            echo json_encode(['status' => 'success', 'data' => $news]);
        } catch(Exception $e) { echo json_encode(['status' => 'error']); }
        exit;
    }

    if ($_POST['action'] === 'global_search') {
        header('Content-Type: application/json');
        $term = "%" . trim($_POST['term']) . "%";
        $results = [];
        
        try { 
            try {
                $stmt = $db->prepare("SELECT id, orijinal_ad as title FROM dosyalar WHERE user_id = ? AND is_trashed = 0 AND orijinal_ad LIKE ? LIMIT 5");
                $stmt->execute([$user_id, $term]);
                while($row = $stmt->fetch()) { $results[] = ['app' => 'dosyalar', 'title' => $row['title'], 'icon' => 'fas fa-file-alt', 'color' => '#38bdf8', 'url' => 'dosyalar?search='.urlencode($row['title'])]; }
            } catch(Exception $e) {}

            try {
                $stmt = $db->prepare("SELECT id, baslik as title FROM notlar WHERE user_id = ? AND (baslik LIKE ? OR icerik LIKE ?) LIMIT 5");
                $stmt->execute([$user_id, $term, $term]);
                while($row = $stmt->fetch()) { $results[] = ['app' => 'notlar', 'title' => $row['title'], 'icon' => 'fas fa-sticky-note', 'color' => '#fbbf24', 'url' => 'notlar']; }
            } catch(Exception $e) {}

        } catch(Exception $e) {}
        echo json_encode($results); exit;
    }
}

// Uygulama Listesi (Başlat Menüsü İçin)
$apps = [
    ['id' => 'puemex',   'title' => 'Puemex',    'icon' => 'fas fa-home',          'url' => 'index',      'color' => '#a855f7'],
    ['id' => 'paint',    'title' => 'Puemex Paint','icon' => 'fas fa-paint-brush',   'url' => 'app_paint',  'color' => '#ec4899'],
    ['id' => 'dosyalar', 'title' => 'Dosyalar',  'icon' => 'fas fa-folder-open',   'url' => 'dosyalar',   'color' => '#38bdf8'],
    ['id' => 'galeri',   'title' => 'Galeri',    'icon' => 'fas fa-images',        'url' => 'galeri',     'color' => '#f43f5e'],
    ['id' => 'haberler', 'title' => 'Haberler',  'icon' => 'fas fa-rss',           'url' => 'haberler',   'color' => '#f43f5e'],
    ['id' => 'notlar',   'title' => 'Notlar',    'icon' => 'fas fa-sticky-note',   'url' => 'notlar',     'color' => '#fbbf24'],
    ['id' => 'piyasa',   'title' => 'Piyasalar', 'icon' => 'fas fa-chart-line',    'url' => 'piyasalar',  'color' => '#10b981'],
    ['id' => 'gorevler', 'title' => 'Görevler',  'icon' => 'fas fa-tasks',         'url' => 'gorevler',   'color' => '#a855f7'],
    ['id' => 'takvim',   'title' => 'Takvim',    'icon' => 'fas fa-calendar-alt',  'url' => 'takvim',     'color' => '#a855f7']
];
?>
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
    <title>Puemex OS | WebOS Center</title>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" rel="stylesheet">
    
    <link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
    <script src="https://cdn.quilljs.com/1.3.6/quill.min.js"></script>

    <script> const coreApps = <?= json_encode($apps) ?>; </script>

    <style>
        :root {
            --taskbar-bg: rgba(10, 10, 10, 0.85);
            --window-bg: rgba(15, 15, 15, 0.98);
            --accent: #a855f7; 
            --glass: blur(30px) saturate(150%);
            --border: rgba(255, 255, 255, 0.08);
            --icon-size: 75px;
            --icon-font: 2rem;
            --text-font: 0.7rem;
            --icon-step: 90px;
        }

        * { box-sizing: border-box; margin: 0; padding: 0; font-family: 'Inter', sans-serif; -webkit-tap-highlight-color: transparent; }
        
        body { 
            background-color: #000; background-position: center center; background-repeat: no-repeat;
            background-attachment: fixed; background-size: cover; height: 100vh; overflow: hidden; user-select: none;
            transition: background-image 0.5s ease-in-out;
        }
        body.is-dragging iframe { pointer-events: none !important; }

        ::-webkit-scrollbar { display: none; }
        * { scrollbar-width: none; -ms-overflow-style: none; }

        #desktop { width: 100%; height: 100vh; position: relative; z-index: 1; overflow: hidden; }

        .desktop-icon {
            display: flex; flex-direction: column; align-items: center; justify-content: flex-start;
            width: var(--icon-size); height: calc(var(--icon-size) + 15px); border-radius: 12px; cursor: pointer; position: absolute;
            transition: background 0.2s, border 0.2s, top 0.3s; text-align: center; border: 1px solid transparent; padding-top: 12px;
        }
        .desktop-icon:hover { background: rgba(255, 255, 255, 0.08); border-color: rgba(255,255,255,0.05); }
        .desktop-icon i { font-size: var(--icon-font); margin-bottom: 6px; filter: drop-shadow(0 4px 6px rgba(0,0,0,0.6)); pointer-events: none;}
        .desktop-icon span { color: #fff; font-size: var(--text-font); font-weight: 600; text-shadow: 0 2px 4px rgba(0,0,0,0.9); pointer-events: none; word-wrap: break-word; max-width: 100%; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-height: 1.2;}

        .os-context-menu {
            position: fixed; background: rgba(20, 20, 20, 0.95); backdrop-filter: blur(20px);
            border: 1px solid var(--border); border-radius: 10px; padding: 6px; 
            min-width: 180px; box-shadow: 0 15px 40px rgba(0,0,0,0.8); z-index: 1000000; display: none; flex-direction: column;
        }
        .context-btn { display: flex; align-items: center; gap: 10px; padding: 8px 12px; color: #fff; font-size: 0.8rem; font-weight: 500; border-radius: 6px; cursor: pointer; transition: 0.2s; } 
        .context-btn:hover { background: rgba(255,255,255,0.1); color: var(--accent); }
        .context-btn i { width: 18px; text-align: center; font-size: 0.9rem; }
        .context-divider { height: 1px; background: var(--border); margin: 4px 0; }

        .context-btn.has-submenu { position: relative; justify-content: space-between; }
        .context-btn.has-submenu .fa-chevron-right { font-size: 0.65rem; opacity: 0.7; margin-left: auto; }
        
        .context-submenu {
            position: absolute; left: calc(100% - 2px); top: -5px; 
            background: rgba(20, 20, 20, 0.95); backdrop-filter: blur(20px);
            border: 1px solid var(--border); border-radius: 10px; padding: 6px;
            min-width: 180px; box-shadow: 0 15px 40px rgba(0,0,0,0.8);
            display: none; flex-direction: column; cursor: default;
        }
        .context-btn.has-submenu:hover > .context-submenu { display: flex; }

        /* BAŞLAT MENÜSÜ */
        .start-menu-panel {
            position: fixed; bottom: 75px; left: 50%; transform: translateX(-50%) translateY(20px);
            width: 400px; max-height: 550px; background: rgba(15, 15, 15, 0.95); backdrop-filter: blur(30px);
            border: 1px solid var(--border); border-radius: 20px; box-shadow: 0 20px 60px rgba(0,0,0,0.8);
            z-index: 100000; opacity: 0; visibility: hidden; transition: 0.3s cubic-bezier(0.16, 1, 0.3, 1);
            display: flex; flex-direction: column; overflow: hidden;
        }
        .start-menu-panel.show { opacity: 1; visibility: visible; transform: translateX(-50%) translateY(0); }
        .sm-search { padding: 15px; border-bottom: 1px solid rgba(255,255,255,0.05); }
        .sm-search input { width: 100%; background: rgba(0,0,0,0.5); border: 1px solid rgba(255,255,255,0.1); color: #fff; padding: 10px 15px; border-radius: 12px; outline: none; font-size: 0.9rem; transition: 0.2s;}
        .sm-search input:focus { border-color: var(--accent); }
        .sm-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 15px; padding: 20px; overflow-y: auto; flex: 1;}
        .sm-app-item { display: flex; flex-direction: column; align-items: center; justify-content: flex-start; gap: 8px; cursor: pointer; padding: 10px 5px; border-radius: 12px; transition: 0.2s; text-align: center; }
        .sm-app-item:hover { background: rgba(255,255,255,0.1); transform: translateY(-2px); }
        .sm-app-item i { font-size: 2rem; filter: drop-shadow(0 4px 6px rgba(0,0,0,0.4)); pointer-events: none;}
        .sm-app-item span { font-size: 0.75rem; color: #fff; font-weight: 600; line-height: 1.2; word-break: break-word; pointer-events: none;}

        #sys-menu-panel {
            position: fixed; bottom: 85px; right: 20px; background: rgba(10, 10, 10, 0.5); backdrop-filter: blur(20px);
            border: 1px solid var(--border); border-radius: 16px; padding: 10px;
            min-width: 220px; box-shadow: 0 10px 40px rgba(0,0,0,0.6); z-index: 100000; 
            opacity: 0; visibility: hidden; transform: translateY(15px); transition: 0.2s cubic-bezier(0.16, 1, 0.3, 1);
            display: flex; flex-direction: column;
        }
        #sys-menu-panel.show { opacity: 1; visibility: visible; transform: translateY(0); }
        .sys-menu-user { display: flex; align-items: center; gap: 12px; padding: 12px 15px; color: #fff; font-weight: 700; font-size: 0.95rem; border-bottom: 1px solid var(--border); margin-bottom: 5px;}
        .sys-menu-user i { font-size: 1.8rem; color: var(--accent); filter: drop-shadow(0 0 5px var(--accent));}

        #os-prompt-modal { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: rgba(0,0,0,0.6); backdrop-filter: blur(10px); z-index: 9999999; display: none; align-items: center; justify-content: center; }
        .prompt-box { background: var(--window-bg); border: 1px solid var(--border); border-radius: 16px; padding: 20px; width: 320px; box-shadow: 0 20px 50px rgba(0,0,0,0.8); display: flex; flex-direction: column; }
        .prompt-title { color: #fff; font-weight: 700; font-size: 1rem; margin-bottom: 15px; }
        .prompt-input { width: 100%; background: rgba(0,0,0,0.5); border: 1px solid rgba(255,255,255,0.2); color: #fff; padding: 10px 12px; border-radius: 8px; font-size: 0.9rem; outline: none; margin-bottom: 20px; }
        .prompt-input:focus { border-color: var(--accent); }
        .prompt-actions { display: flex; justify-content: flex-end; gap: 10px; }
        .prompt-btn-cancel { background: transparent; border: none; color: #94a3b8; cursor: pointer; font-weight: 600; padding: 8px 15px; border-radius: 8px; transition: 0.2s; font-size: 0.85rem;}
        .prompt-btn-cancel:hover { color: #fff; background: rgba(255,255,255,0.1); }
        .prompt-btn-ok { background: var(--accent); border: none; color: #fff; cursor: pointer; font-weight: 700; padding: 8px 15px; border-radius: 8px; transition: 0.2s; font-size: 0.85rem;}

        #toast-container { position: fixed; bottom: 85px; right: 20px; display: flex; flex-direction: column; gap: 10px; z-index: 999999; pointer-events: none; }
        .toast { background: rgba(10, 10, 10, 0.5); backdrop-filter: blur(20px); border: 1px solid var(--border); border-radius: 12px; padding: 12px 15px; color: #fff; display: flex; align-items: center; gap: 12px; box-shadow: 0 10px 40px rgba(0,0,0,0.6); transform: translateX(120%); transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.4s; opacity: 0; min-width: 220px;}
        .toast.show { transform: translateX(0); opacity: 1; }
        .toast-icon { font-size: 1.2rem; filter: drop-shadow(0 0 5px currentColor); }
        .toast-content { display: flex; flex-direction: column; flex: 1; }
        .toast-title { font-weight: 700; font-size: 0.85rem; }
        .toast-msg { font-size: 0.75rem; color: #94a3b8; margin-top: 2px;}

        /* WIDGET GENEL TASARIMLARI */
        #clock-widget { position: absolute; top: 30px; right: 30px; width: 240px; height: 120px; min-width: 150px; min-height: 80px; background: rgba(10, 10, 10, 0.5); backdrop-filter: blur(20px); border: 1px solid var(--border); border-radius: 20px; padding: 15px; display: flex; flex-direction: column; align-items: center; justify-content: center; cursor: move; z-index: 5; box-shadow: 0 10px 40px rgba(0,0,0,0.6); container-type: size; }
        #clock-widget:hover { border-color: rgba(168, 85, 247, 0.3); box-shadow: 0 15px 40px rgba(0,0,0,0.6), inset 0 0 30px rgba(168, 85, 247, 0.2); }
        #clock-time-main { font-size: 35cqmin; font-weight: 900; color: #fff; letter-spacing: -1px; pointer-events: none; line-height: 1;}
        #clock-date-main { font-size: 10cqmin; font-weight: 600; color: var(--accent); margin-top: 5px; text-transform: uppercase; pointer-events: none;}

        #quick-note-widget { position: absolute; top: 170px; right: 30px; width: 220px; height: 220px; min-width: 180px; min-height: 150px; background: rgba(10, 10, 10, 0.5); backdrop-filter: blur(20px); border: 1px solid var(--border); border-radius: 12px; display: flex; flex-direction: column; overflow: hidden; z-index: 5; box-shadow: 0 10px 40px rgba(0,0,0,0.6); transition: border 0.2s, box-shadow 0.2s; }
        #quick-note-widget:hover { border-color: rgba(251, 191, 36, 0.4); box-shadow: 0 15px 40px rgba(0,0,0,0.6), inset 0 0 30px rgba(251, 191, 36, 0.1); }
        .qn-header { padding: 8px 12px; background: rgba(255,255,255,0.05); font-size: 0.75rem; font-weight: 700; color: #fff; display: flex; align-items: center; justify-content: space-between; cursor: move; border-bottom: 1px solid rgba(255,255,255,0.05); letter-spacing: 0.5px; }
        #quickNoteText { flex: 1; background: transparent; border: none; color: #fff; padding: 12px; font-size: 0.85rem; font-family: 'Inter', sans-serif; resize: none; outline: none; line-height: 1.5; }

        #calendar-widget { position: absolute; top: 410px; right: 30px; width: 220px; height: 220px; min-width: 180px; min-height: 150px; background: rgba(10, 10, 10, 0.5); backdrop-filter: blur(20px); border: 1px solid var(--border); border-radius: 12px; display: flex; flex-direction: column; overflow: hidden; z-index: 5; box-shadow: 0 10px 40px rgba(0,0,0,0.6); transition: border 0.2s, box-shadow 0.2s; }
        #calendar-widget:hover { border-color: rgba(168, 85, 247, 0.4); box-shadow: 0 15px 40px rgba(0,0,0,0.6), inset 0 0 30px rgba(168, 85, 247, 0.1); }
        .cw-item { background: rgba(255,255,255,0.05); border-left: 3px solid var(--accent); padding: 6px 8px; border-radius: 6px; display: flex; flex-direction: column; margin-bottom: 6px;}
        .cw-title { font-size: 0.8rem; font-weight: 700; color: #fff; margin-bottom:2px; word-break: break-word;}
        .cw-time { font-size: 0.65rem; color: #94a3b8; }

        #news-widget { position: absolute; top: 30px; left: 300px; width: 280px; height: 300px; min-width: 220px; min-height: 200px; background: rgba(10, 10, 10, 0.5); backdrop-filter: blur(20px); border: 1px solid var(--border); border-radius: 12px; display: flex; flex-direction: column; overflow: hidden; z-index: 5; box-shadow: 0 10px 40px rgba(0,0,0,0.6); transition: border 0.2s, box-shadow 0.2s; }
        #news-widget:hover { border-color: rgba(244, 63, 94, 0.4); box-shadow: 0 15px 40px rgba(0,0,0,0.6), inset 0 0 30px rgba(244, 63, 94, 0.1); }
        .nw-item { display: flex; flex-direction: column; gap: 4px; cursor: pointer; transition: 0.2s; padding: 8px 10px; border-radius: 8px; border-bottom: 1px solid rgba(255,255,255,0.03);}
        .nw-item:hover { background: rgba(255,255,255,0.08); padding-left: 15px;}
        .nw-title { font-size: 0.8rem; font-weight: 600; color: #e2e8f0; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-height:1.4;}
        .nw-source { font-size: 0.65rem; color: #f43f5e; font-weight: 800; text-transform: uppercase;}

        /* PENCERELER */
        .window { position: absolute; min-width: 300px; min-height: 250px; background: var(--window-bg); border: 1px solid var(--border); border-radius: 12px; box-shadow: 0 20px 60px rgba(0,0,0,0.8); backdrop-filter: var(--glass); display: flex; flex-direction: column; overflow: hidden; z-index: 10; transition: width 0.2s, height 0.2s, left 0.2s, top 0.2s; }
        .window.is-dragging { transition: none !important; } 
        .window-header { height: 40px; background: rgba(255,255,255,0.02); display: flex; align-items: center; justify-content: space-between; padding: 0 12px; cursor: move; border-bottom: 1px solid var(--border); z-index: 2;}
        .window-title { color: #ffffff; font-size: 0.85rem; font-weight: 600; display: flex; align-items: center; gap: 8px; pointer-events: none; }
        .window-controls { display: flex; gap: 6px; align-items: center; }
        .win-btn { width: 26px; height: 26px; border-radius: 6px; cursor: pointer; border: none; background: transparent; color: #94a3b8; display: flex; align-items: center; justify-content: center; transition: 0.2s; font-size: 0.8rem; }
        .win-btn:hover { background: rgba(255,255,255,0.1); color: #fff; }
        .win-close:hover { background: #e11d48; color: #fff; }
        .window-content { flex: 1; position: relative; background: #000; display: flex; flex-direction: column; overflow: hidden;}
        .window-content iframe { position: absolute; top: 0; left: 0; width: 125%; height: 125%; transform: scale(0.8); transform-origin: top left; border: none; display: block;}
        .resizer { width: 12px; height: 12px; position: absolute; right: 0; bottom: 0; cursor: se-resize; z-index: 20; }
        .folder-toolbar { display: flex; align-items: center; padding: 8px 12px; background: rgba(255,255,255,0.02); border-bottom: 1px solid var(--border); gap: 8px; z-index: 2;}
        .f-btn { background: rgba(255,255,255,0.05); border: none; color: #fff; width: 28px; height: 28px; border-radius: 6px; cursor: pointer; transition: 0.2s; display: flex; align-items: center; justify-content: center; font-size: 0.85rem;}
        .f-btn:hover { background: var(--accent); }
        .f-btn:disabled { opacity: 0.3; cursor: not-allowed; background: rgba(255,255,255,0.05); }
        .f-path { flex: 1; font-size: 0.8rem; color: #cbd5e1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-left: 8px; font-weight: 500;}

        /* KİŞİSELLEŞTİRME */
        .theme-section-title { color:#fff; padding:12px 15px 4px 15px; margin:0; font-size:0.85rem; font-weight:700; letter-spacing: 0.5px; text-transform:uppercase;}
        .theme-wp-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(120px, 1fr)); gap:10px; padding:12px 15px; }
        .theme-wp-item { height:75px; border-radius:10px; background-size:cover; background-position:center; cursor:pointer; border: 2px solid transparent; transition: 0.2s; box-shadow: 0 4px 10px rgba(0,0,0,0.5);}
        .theme-wp-item:hover { transform: translateY(-2px); box-shadow: 0 8px 15px rgba(0,0,0,0.7);}
        .theme-wp-item.active { border-color: var(--accent); }
        .theme-color-row { display:flex; gap:12px; padding:12px 15px 25px 15px; flex-wrap:wrap;}
        .theme-color-item { width:35px; height:35px; border-radius:50%; cursor:pointer; border: 2px solid transparent; transition: 0.2s; box-shadow: 0 4px 10px rgba(0,0,0,0.5);}
        .theme-color-item:hover { transform: scale(1.1); }
        .theme-color-item.active { border-color: #fff; box-shadow: 0 0 10px currentColor; }

        /* GÖREV ÇUBUĞU */
        #taskbar { position: fixed; bottom: 15px; left: 50%; transform: translateX(-50%); height: 48px; background: var(--taskbar-bg); backdrop-filter: var(--glass); border: 1px solid var(--border); border-radius: 24px; display: flex; align-items: center; justify-content: center; padding: 0 15px; gap: 8px; z-index: 100000; box-shadow: 0 15px 35px rgba(0,0,0,0.7); }
        .task-btn { width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: 0.2s; position: relative; }
        .task-btn:hover { background: rgba(255,255,255,0.1); transform: translateY(-2px); }
        .task-btn i { font-size: 1.1rem; color: #fff;}
        .task-btn.active::after { content: ''; position: absolute; bottom: -3px; width: 4px; height: 4px; background: var(--accent); border-radius: 50%; box-shadow: 0 0 6px var(--accent); }
        
        .task-search-wrapper { display: flex; align-items: center; flex: 1; min-width: 150px; position: relative;}
        .task-search-wrapper input { width: 100%; background: transparent; border: none; color: #fff; font-size: 0.85rem; outline: none; font-weight: 500; padding: 4px; }
        
        #search-results { position: absolute; bottom: 65px; left: 50%; transform: translateX(-50%); width: 300px; background: rgba(15, 15, 15, 0.98); backdrop-filter: blur(25px); border: 1px solid var(--border); border-radius: 16px; padding: 8px; display: none; flex-direction: column; gap: 4px; z-index: 100001; box-shadow: 0 20px 50px rgba(0,0,0,0.9); max-height: 300px; overflow-y: auto; }
        .search-result-item { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 8px; cursor: pointer; color: #fff; transition: 0.2s; }
        .search-result-item:hover { background: rgba(255,255,255,0.1); }
        .search-result-info { display: flex; flex-direction: column; }
        .search-result-title { font-weight: 700; font-size: 0.85rem; }
        .search-result-type { font-size: 0.65rem; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.5px; }

        /* YAPAY ZEKA PANELİ */
        .ai-panel { position: fixed; bottom: 85px; left: 50%; transform: translateX(-50%) scale(0.95); width: 380px; height: 500px; background: rgba(10, 10, 10, 0.98); backdrop-filter: blur(30px); border: 1px solid var(--border); border-radius: 20px; box-shadow: 0 30px 80px rgba(0,0,0,1); z-index: 9998; display: flex; flex-direction: column; opacity: 0; visibility: hidden; transition: 0.3s cubic-bezier(0.16, 1, 0.3, 1); overflow: hidden; }
        .ai-panel.show { opacity: 1; visibility: visible; transform: translateX(-50%) scale(1); }
        .ai-header { padding: 15px 20px; border-bottom: 1px solid rgba(255,255,255,0.05); display: flex; justify-content: space-between; align-items: center; }
        .ai-chat { flex: 1; padding: 15px 20px; overflow-y: auto; display: flex; flex-direction: column; gap: 12px; }
        .ai-msg { max-width: 85%; padding: 12px 15px; border-radius: 14px; font-size: 0.85rem; line-height: 1.5; color: #fff; }
        .ai-msg.user { background: #222; align-self: flex-end; border-bottom-right-radius: 4px; }
        .ai-msg.ai { background: rgba(168, 85, 247, 0.15); border: 1px solid var(--accent); align-self: flex-start; border-bottom-left-radius: 4px; }
        .ai-input-area { padding: 15px 20px; border-top: 1px solid rgba(255,255,255,0.05); display: flex; gap: 10px; }
        .ai-input-area input { flex: 1; background: #000; border: 1px solid rgba(255,255,255,0.1); color: #fff; padding: 10px 15px; border-radius: 12px; outline: none; font-size: 0.9rem;}
        .ai-send { background: var(--accent); color: #fff; border: none; width: 40px; height: 40px; border-radius: 12px; cursor: pointer; transition: 0.2s; display: flex; align-items: center; justify-content: center; font-size: 1.1rem; }

        @media (max-width: 768px) {
            #desktop {
                display: flex !important; flex-direction: column !important; flex-wrap: wrap !important;
                align-content: flex-start !important; align-items: flex-start !important;
                gap: 15px !important; padding: 20px !important;
                height: calc(100vh - 80px) !important; 
                overflow-x: auto !important; overflow-y: hidden !important;
            }
            .desktop-icon { position: relative !important; left: 0 !important; top: 0 !important; right: auto !important; bottom: auto !important; margin: 0 !important; }
            #clock-widget, #quick-note-widget, #calendar-widget, #news-widget { display: none !important; }
            #taskbar { width: 92%; bottom: 15px; padding: 0 10px; height: 50px;}
            .window { width: 95% !important; height: calc(100vh - 100px) !important; left: 2.5% !important; top: 15px !important; border-radius: 16px; }
            .window-content iframe { width: 100% !important; height: 100% !important; transform: scale(1) !important; position: relative !important; top: auto !important; left: auto !important;}
            .start-menu-panel { width: 92%; left: 4%; transform: translateX(0) translateY(20px); }
            .start-menu-panel.show { transform: translateX(0) translateY(0); }
            .ai-panel { width: 92%; left: 4%; bottom: 80px; height: 55vh; max-height: 400px; transform: scale(0.95); }
            .ai-panel.show { transform: scale(1); }
        }

        .ql-toolbar.ql-snow { background: rgba(0,0,0,0.4); border: none !important; border-bottom: 1px solid var(--border) !important; padding: 5px !important;}
        .ql-container.ql-snow { border: none !important; color: #f8fafc; font-family: 'Inter', sans-serif; font-size: 0.9rem; flex: 1; height: auto; }
        .ql-snow .ql-stroke { stroke: #cbd5e1; }
        .ql-snow .ql-fill { fill: #cbd5e1; }
        .ql-snow .ql-picker { color: #cbd5e1; }
        .ql-editor { padding: 15px; height: 100%; overflow-y: auto; }
        .ql-editor.ql-blank::before { color: #64748b; font-style: normal; }
    </style>
</head>
<body>

    <div id="toast-container"></div>

    <div id="os-prompt-modal">
        <div class="prompt-box">
            <h3 id="os-prompt-title" class="prompt-title">Adını Girin</h3>
            <input type="text" id="os-prompt-input" class="prompt-input" onkeypress="if(event.key === 'Enter') confirmOsPrompt()">
            <div class="prompt-actions">
                <button class="prompt-btn-cancel" onclick="closeOsPrompt()">İptal</button>
                <button class="prompt-btn-ok" onclick="confirmOsPrompt()">Oluştur</button>
            </div>
        </div>
    </div>

    <div id="sys-menu-panel">
        <div class="sys-menu-user">
            <i class="fas fa-user-circle"></i> <span>Puemex OS</span>
        </div>
        <div class="context-btn" onclick="openApp('sistem', 'Sistem Ayarları', 'yonetim', 'fas fa-cogs', '#94a3b8'); toggleSysMenu();"><i class="fas fa-cogs" style="color:#94a3b8"></i> Sistem Ayarları</div>
        <div class="context-btn" onclick="openThemeSettings(); toggleSysMenu();"><i class="fas fa-paint-brush" style="color:var(--accent)"></i> Kişiselleştirme Merkezi</div>
        <div class="context-divider"></div>
        <div class="context-btn" onclick="window.location.href='logout'"><i class="fas fa-sign-out-alt" style="color:#f43f5e"></i> Çıkış Yap</div>
    </div>

    <div id="start-menu" class="start-menu-panel">
        <div class="sm-search">
            <input type="text" placeholder="Uygulamalarda ara..." onkeyup="filterStartMenu(this.value)">
        </div>
        <div class="sm-grid" id="sm-app-grid">
            </div>
    </div>

    <div id="desktop-context-menu" class="os-context-menu">
        <div class="context-btn has-submenu">
            <div style="display:flex; align-items:center; gap:10px; pointer-events:none;">
                <i class="fas fa-eye" style="color:#38bdf8"></i> Görünüm
            </div>
            <i class="fas fa-chevron-right"></i>
            <div class="context-submenu">
                <div class="context-btn" onclick="changeIconSize('large')"><i class="fas fa-check check-mark check-size" id="check-size-large"></i> Büyük Simgeler</div>
                <div class="context-btn" onclick="changeIconSize('medium')"><i class="fas fa-check check-mark check-size" id="check-size-medium"></i> Orta Simgeler</div>
                <div class="context-btn" onclick="changeIconSize('small')"><i class="fas fa-check check-mark check-size" id="check-size-small"></i> Küçük Simgeler</div>
            </div>
        </div>
        <div class="context-divider"></div>
        <div class="context-btn" onclick="openPrompt('folder')"><i class="fas fa-folder-plus" style="color:#fbbf24"></i> Yeni Klasör</div>
        <div class="context-btn" onclick="openPrompt('txt')"><i class="fas fa-file-alt" style="color:#e2e8f0"></i> Yeni Metin Belgesi</div>
    </div>

    <div id="icon-context-menu" class="os-context-menu">
        <div class="context-btn" onclick="openRenamePrompt()"><i class="fas fa-edit" style="color:#38bdf8"></i> Yeniden Adlandır</div>
        <div class="context-divider"></div>
        <div class="context-btn" onclick="deleteCustomIcon()"><i class="fas fa-trash-alt" style="color:#f43f5e"></i> Çöpe Taşı</div>
    </div>

    <div id="start-app-context-menu" class="os-context-menu">
        <div class="context-btn" onclick="addActiveAppToDesktop()"><i class="fas fa-desktop" style="color:#38bdf8"></i> Masaüstüne Kısayol Ekle</div>
    </div>

    <div id="desktop">
        <div class="desktop-icon" id="icon-trash" style="left: 30px; top: 30px;" ondragstart="return false;" onmousedown="startIconDrag(event, this)" ondblclick="openTrashWindow()">
            <i class="fas fa-trash-alt" style="color: #94a3b8;"></i><span>Çöp Kutusu</span>
        </div>

        <div id="clock-widget" onmousedown="startIconDrag(event, this)" ondragstart="return false;">
            <div id="clock-time-main">00:00</div>
            <div id="clock-date-main">01 OCAK 2026</div>
            <div class="resizer" onmousedown="initWidgetResize(event, this.parentElement)"></div>
        </div>

        <div id="quick-note-widget" onmousedown="startIconDrag(event, this)" ondragstart="return false;">
            <div class="qn-header">
                <span><i class="fas fa-thumbtack" style="color: #fbbf24; margin-right:5px;"></i> Hızlı Not</span>
                <i class="fas fa-circle-notch fa-spin" id="qn-save-loader" style="color:#888; display:none; font-size:0.8rem;"></i>
            </div>
            <textarea id="quickNoteText" placeholder="Hızlıca not al..." oninput="triggerQuickNoteSave()"></textarea>
            <div class="resizer" onmousedown="initWidgetResize(event, this.parentElement)"></div>
        </div>

        <div id="news-widget" onmousedown="startIconDrag(event, this)" ondragstart="return false;">
            <div class="qn-header">
                <span><i class="fas fa-rss" style="color: #f43f5e; margin-right:5px;"></i> Son Dakika</span>
                <i class="fas fa-sync-alt" style="cursor:pointer; font-size:0.8rem; color:#94a3b8;" onclick="loadWidgetNews()" title="Yenile"></i>
            </div>
            <div id="news-widget-content" style="flex:1; overflow-y:auto; padding:8px; display:flex; flex-direction:column; gap:4px;">
                <div style="text-align:center; padding:20px; color:#666; font-size:0.8rem;">Haberler Yükleniyor...</div>
            </div>
            <div class="resizer" onmousedown="initWidgetResize(event, this.parentElement)"></div>
        </div>

        <div id="calendar-widget" onmousedown="startIconDrag(event, this)" ondragstart="return false;">
            <div class="qn-header">
                <span><i class="fas fa-calendar-alt" style="color: #a855f7; margin-right:5px;"></i> Yaklaşan Etkinlikler</span>
                <i class="fas fa-sync-alt" style="cursor:pointer; font-size:0.8rem; color:#94a3b8;" onclick="loadWidgetEvents()" title="Yenile"></i>
            </div>
            <div id="calendar-widget-content" style="flex:1; overflow-y:auto; padding:10px; display:flex; flex-direction:column; gap:6px;">
                <div style="text-align:center; padding:20px; color:#666; font-size:0.8rem;">Yükleniyor...</div>
            </div>
            <div class="resizer" onmousedown="initWidgetResize(event, this.parentElement)"></div>
        </div>
    </div>

    <div class="ai-panel" id="globalAiPanel">
        <div class="ai-header">
            <h3 style="color:#fff; font-weight:800; display:flex; align-items:center; gap:8px; margin:0; font-size:0.95rem;">
                <svg width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 0C12 6.62742 17.3726 12 24 12C17.3726 12 12 17.3726 12 24C12 17.3726 6.62742 12 0 12C6.62742 12 12 6.62742 12 0Z" fill="var(--accent)"/></svg>
                Puemex AI
            </h3>
            <i class="fas fa-times win-btn" style="width:26px; height:26px; border-radius:50%;" onclick="toggleGlobalAI()"></i>
        </div>
        <div class="ai-chat" id="globalAiChat">
            <div class="ai-msg ai">Sisteme hoş geldin Özgür. Puemex OS'de sana nasıl yardımcı olabilirim?</div>
        </div>
        <div class="ai-input-area">
            <input type="text" id="globalAiInput" placeholder="Puemex'e bir şey sor..." autocomplete="off" onkeypress="if(event.key === 'Enter') sendGlobalAIMessage()">
            <button class="ai-send" onclick="sendGlobalAIMessage()"><i class="fas fa-paper-plane"></i></button>
        </div>
    </div>

    <div id="taskbar">
        <div class="task-btn" id="start-btn" title="Uygulamalar" onclick="toggleStartMenu(event)">
            <i class="fas fa-th-large" style="color:var(--accent);"></i>
        </div>
        <div class="task-btn" id="ai-btn" title="Puemex AI" onclick="toggleGlobalAI()">
            <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 0C12 6.62742 17.3726 12 24 12C17.3726 12 12 17.3726 12 24C12 17.3726 6.62742 12 0 12C6.62742 12 12 6.62742 12 0Z" fill="var(--accent)"/></svg>
        </div>
        <div style="width:1px; height:20px; background:var(--border); margin:0 5px;"></div>
        <div class="task-search-wrapper">
            <input type="text" id="omniboxInput" placeholder="Sistemde ara..." autocomplete="off" oninput="searchSystem(this.value)">
        </div>
        <div id="taskbar-apps" style="display:flex; gap:3px;"></div>
        <div style="width:1px; height:20px; background:var(--border); margin:0 5px;"></div>
        <div class="task-btn" title="Sistem Menüsü" onclick="toggleSysMenu(event)" id="sys-menu-btn" style="position:absolute; right:15px;"><i class="fas fa-cog" style="color:#94a3b8"></i></div>
    </div>

    <div id="search-results"></div>

    <script>
        // --- KUSURSUZ PWA (UYGULAMA) UYUMLU IDLE TIMER ---
        const timeoutMs = 15 * 60 * 1000; 
        const resetActivity = () => { localStorage.setItem('px_last_activity', Date.now()); };
        if (!localStorage.getItem('px_last_activity')) resetActivity();
        ['click', 'touchstart', 'mousemove', 'keypress', 'scroll', 'drag'].forEach(evt => { document.addEventListener(evt, resetActivity, {passive: true}); });
        const checkTimeout = () => { const lastAct = parseInt(localStorage.getItem('px_last_activity') || Date.now()); if (Date.now() - lastAct > timeoutMs) { window.location.replace('login?reason=timeout'); } };
        setInterval(checkTimeout, 10000);
        document.addEventListener("visibilitychange", () => { if (document.visibilityState === 'visible') checkTimeout(); });
        window.addEventListener('focus', checkTimeout);

        // --- HIZLI NOT VERİTABANI MOTORU ---
        let qnSaveTimeout = null;
        function loadQuickNote() {
            const fd = new FormData(); fd.append('action', 'load_quick_note');
            fetch('masaustu', { method: 'POST', body: fd }).then(r => r.json()).then(d => { if(d.status === 'success') document.getElementById('quickNoteText').value = d.content; });
        }
        function triggerQuickNoteSave() {
            document.getElementById('qn-save-loader').style.display = 'block';
            clearTimeout(qnSaveTimeout);
            qnSaveTimeout = setTimeout(saveQuickNoteToDb, 1000);
        }
        function saveQuickNoteToDb() {
            const content = document.getElementById('quickNoteText').value;
            const fd = new FormData(); fd.append('action', 'save_quick_note'); fd.append('content', content);
            fetch('masaustu', { method: 'POST', body: fd }).then(r => r.json()).then(d => { document.getElementById('qn-save-loader').style.display = 'none'; });
        }

        // --- HABERLER WIDGET MOTORU ---
        function loadWidgetNews() {
            const content = document.getElementById('news-widget-content');
            if(!content) return;
            const fd = new FormData(); fd.append('action', 'load_widget_news');
            fetch('masaustu', { method: 'POST', body: fd }).then(r => r.json()).then(d => {
                if(d.status === 'success' && d.data.length > 0) {
                    let html = '';
                    d.data.forEach(n => {
                        html += `<div class="nw-item" onclick="openApp('haberler', 'Haberler', 'haberler?oku=${encodeURIComponent(n.link)}', 'fas fa-rss', '#f43f5e')">
                                    <span class="nw-source">${n.kaynak_adi}</span>
                                    <span class="nw-title">${n.baslik}</span>
                                 </div>`;
                    });
                    content.innerHTML = html;
                } else { content.innerHTML = '<div style="text-align:center; padding:15px; color:#94a3b8; font-size:0.75rem;">Haber bulunamadı.</div>'; }
            });
        }

        // --- TAKVİM WIDGET MOTORU ---
        async function loadWidgetEvents() {
            const content = document.getElementById('calendar-widget-content');
            if(!content) return;
            try {
                const res = await fetch('takvim?action=fetch'); let events = await res.json();
                const now = new Date(); events = events.filter(e => new Date(e.start) >= now || new Date(e.end) >= now); events.sort((a,b) => new Date(a.start) - new Date(b.start));
                if(events.length === 0) { content.innerHTML = '<div style="text-align:center; padding:20px 5px; color:#94a3b8; font-size:0.75rem;"><i class="fas fa-glass-cheers fa-2x" style="margin-bottom:8px; opacity:0.5;"></i><br>Yaklaşan etkinlik yok.</div>'; return; }
                let html = '';
                events.slice(0, 5).forEach(e => {
                    const d = new Date(e.start);
                    const timeStr = d.toLocaleDateString('tr-TR', {day:'numeric', month:'short'}) + ' • ' + d.toLocaleTimeString('tr-TR', {hour:'2-digit', minute:'2-digit'});
                    html += `<div class="cw-item" style="border-left-color:${e.color || '#a855f7'};"><span class="cw-title">${e.title}</span><span class="cw-time"><i class="far fa-clock"></i> ${timeStr}</span></div>`;
                });
                content.innerHTML = html;
            } catch(err) { content.innerHTML = '<div style="text-align:center; padding:15px; color:#f43f5e; font-size:0.75rem;">Etkinlikler yüklenemedi.</div>'; }
        }

        // --- VFS ---
        let vfs = JSON.parse(localStorage.getItem('puemex_vfs_v2') || '[]');
        function saveVFS() { localStorage.setItem('puemex_vfs_v2', JSON.stringify(vfs)); }
        let folderNavHistory = {};

        // --- BAŞLAT MENÜSÜ ---
        let activeStartAppId = null;
        function renderStartMenu(filter = '') {
            const grid = document.getElementById('sm-app-grid'); grid.innerHTML = '';
            coreApps.forEach(app => {
                if(filter === '' || app.title.toLowerCase().includes(filter.toLowerCase())) {
                    grid.innerHTML += `
                        <div class="sm-app-item" id="sm-app-${app.id}" onclick="openApp('${app.id}', '${app.title}', '${app.url}', '${app.icon}', '${app.color}'); toggleStartMenu();">
                            <i class="${app.icon}" style="color:${app.color};"></i><span>${app.title}</span>
                        </div>`;
                }
            });
        }
        function toggleStartMenu(event) {
            if(event) event.stopPropagation(); const menu = document.getElementById('start-menu');
            if(menu.classList.contains('show')) { menu.classList.remove('show'); } 
            else { menu.classList.add('show'); renderStartMenu(); document.querySelector('.sm-search input').focus();}
        }
        function filterStartMenu(val) { renderStartMenu(val); }

        function addActiveAppToDesktop() {
            document.getElementById('start-app-context-menu').style.display = 'none';
            if(!activeStartAppId) return;
            if(vfs.some(v => v.type === 'app' && v.appId === activeStartAppId && !v.isTrashed && v.parentId === 'root')) {
                showToast('Bilgi', 'Bu uygulama zaten masaüstünde.', 'fas fa-info-circle', '#38bdf8'); return;
            }
            let app = coreApps.find(a => a.id === activeStartAppId);
            if(app) {
                let id = 'custom-app-' + Date.now();
                vfs.push({ id: id, type: 'app', appId: app.id, title: app.title, left: 'auto', top: 'auto', parentId: 'root', isTrashed: false });
                saveVFS(); renderDesktopVfs(); showToast('Başarılı', `'${app.title}' masaüstüne eklendi.`, app.icon, app.color); toggleStartMenu();
            }
        }

        // --- MASAÜSTÜ VFS RENDER ---
        function renderDesktopVfs() {
            document.querySelectorAll('.custom-vfs').forEach(el => { if(el.parentElement.id === 'desktop') el.remove() });
            vfs.filter(item => item.parentId === 'root' && !item.isTrashed).forEach(item => {
                let iconClass, color, dblclick;
                if (item.type === 'app') {
                    let app = coreApps.find(a => a.id === item.appId);
                    if(!app) return; 
                    iconClass = app.icon; color = app.color;
                    dblclick = `openApp('${app.id}', '${app.title}', '${app.url}', '${app.icon}', '${app.color}')`;
                } else {
                    iconClass = item.type === 'folder' ? 'fas fa-folder' : 'fas fa-file-alt'; 
                    color = item.type === 'folder' ? '#fbbf24' : '#e2e8f0';
                    dblclick = item.type === 'folder' ? `openVirtualFolder('${item.id}', '${item.title}', '${iconClass}', '${color}')` : `openVirtualTxt('${item.id}', '${item.title}', '${iconClass}', '${color}')`;
                }

                const div = document.createElement('div'); div.className = 'desktop-icon custom-vfs'; div.id = item.id; 
                if(item.left) div.style.left = item.left; if(item.top) div.style.top = item.top;
                if(item.right) div.style.right = item.right; if(item.bottom) div.style.bottom = item.bottom;
                
                div.ondragstart = () => false; div.onmousedown = (e) => startIconDrag(e, div); 
                div.setAttribute('ondblclick', dblclick);
                div.innerHTML = `<i class="${iconClass}" style="color: ${color};"></i><span>${item.title}</span>`; document.getElementById('desktop').appendChild(div);
            });
            applyOsSettings(); 
        }

        // --- SAĞ TIK YÖNETİMİ ---
        let contextX = 0, contextY = 0; let activeContextIconId = null; let contextTargetFolderId = 'root'; 
        document.addEventListener('contextmenu', (e) => {
            e.preventDefault(); 
            document.getElementById('desktop-context-menu').style.display = 'none'; document.getElementById('icon-context-menu').style.display = 'none'; document.getElementById('start-app-context-menu').style.display = 'none'; document.getElementById('sys-menu-panel').classList.remove('show'); 

            const startAppItem = e.target.closest('.sm-app-item'); const customIcon = e.target.closest('.custom-vfs'); const isInsideFolder = e.target.closest('.window-content');
            if (startAppItem) {
                activeStartAppId = startAppItem.id.replace('sm-app-', ''); const m = document.getElementById('start-app-context-menu'); m.style.display = 'flex'; m.style.left = e.clientX + 'px'; m.style.top = e.clientY + 'px';
            }
            else if (customIcon) {
                activeContextIconId = customIcon.id; const m = document.getElementById('icon-context-menu'); m.style.display = 'flex'; m.style.left = e.clientX + 'px'; m.style.top = e.clientY + 'px';
            } 
            else if (e.target.id === 'desktop' || isInsideFolder) {
                if (isInsideFolder) { const winId = e.target.closest('.window').id; const history = folderNavHistory[winId]; contextTargetFolderId = history ? history[history.length - 1] : 'root'; } 
                else { contextTargetFolderId = 'root'; }
                contextX = e.clientX; contextY = e.clientY; const m = document.getElementById('desktop-context-menu'); m.style.display = 'flex'; m.style.left = contextX + 'px'; m.style.top = contextY + 'px';
            }
        });
        document.addEventListener('click', (e) => { 
            if (!e.target.closest('.os-context-menu')) { document.getElementById('desktop-context-menu').style.display = 'none'; document.getElementById('icon-context-menu').style.display = 'none'; document.getElementById('start-app-context-menu').style.display = 'none'; } 
            if (!e.target.closest('#sys-menu-panel') && !e.target.closest('#sys-menu-btn')) { document.getElementById('sys-menu-panel').classList.remove('show'); }
            if (!e.target.closest('#start-menu') && !e.target.closest('#start-btn')) { document.getElementById('start-menu').classList.remove('show'); }
        });

        // --- AYARLAR VE KİŞİSELLEŞTİRME ---
        let osSettings = JSON.parse(localStorage.getItem('puemex_os_settings')) || { iconSize: 'medium', showClock: true, showQuickNote: true, showCalendarWidget: true, showNewsWidget: true };
        function saveOsSettings() { localStorage.setItem('puemex_os_settings', JSON.stringify(osSettings)); applyOsSettings(); }
        function applyOsSettings() {
            const root = document.documentElement;
            if(osSettings.iconSize === 'small') { root.style.setProperty('--icon-size', '60px'); root.style.setProperty('--icon-font', '1.5rem'); root.style.setProperty('--text-font', '0.65rem'); root.style.setProperty('--icon-step', '75px');}
            else if(osSettings.iconSize === 'large') { root.style.setProperty('--icon-size', '90px'); root.style.setProperty('--icon-font', '2.5rem'); root.style.setProperty('--text-font', '0.8rem'); root.style.setProperty('--icon-step', '110px');}
            else { root.style.setProperty('--icon-size', '75px'); root.style.setProperty('--icon-font', '2rem'); root.style.setProperty('--text-font', '0.7rem'); root.style.setProperty('--icon-step', '90px');}
            if(window.innerWidth > 768) {
                document.getElementById('clock-widget').style.display = osSettings.showClock ? 'flex' : 'none';
                document.getElementById('quick-note-widget').style.display = osSettings.showQuickNote ? 'flex' : 'none';
                document.getElementById('calendar-widget').style.display = osSettings.showCalendarWidget ? 'flex' : 'none';
                document.getElementById('news-widget').style.display = osSettings.showNewsWidget ? 'flex' : 'none';
            }
        }
        function changeIconSize(size) { osSettings.iconSize = size; saveOsSettings(); document.getElementById('desktop-context-menu').style.display = 'none'; }
        function showToast(title, message, iconClass, colorCode) {
            const container = document.getElementById('toast-container'); const toast = document.createElement('div'); toast.className = 'toast';
            toast.innerHTML = `<i class="${iconClass} toast-icon" style="color:${colorCode}"></i><div class="toast-content"><span class="toast-title">${title}</span><span class="toast-msg">${message}</span></div>`;
            container.appendChild(toast); requestAnimationFrame(() => { toast.classList.add('show'); }); setTimeout(() => { toast.classList.remove('show'); setTimeout(() => toast.remove(), 400); }, 3000);
        }

        function toggleSysMenu(event) { if(event) event.stopPropagation(); const menu = document.getElementById('sys-menu-panel'); if(menu.classList.contains('show')) { menu.classList.remove('show'); } else { menu.classList.add('show'); } }

        const wallpapers = [
            "https://images.unsplash.com/photo-1550684848-fac1c5b4e853?q=80&w=2564&auto=format&fit=crop", "https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?q=80&w=2564&auto=format&fit=crop", 
            "https://images.unsplash.com/photo-1614850523459-c2f4c699c52e?q=80&w=2070&auto=format&fit=crop", "https://images.unsplash.com/photo-1534796636912-3b95b3ab5986?q=80&w=2071&auto=format&fit=crop", 
            "https://images.unsplash.com/photo-1604076913837-52ab5629fba9?q=80&w=2574&auto=format&fit=crop", "https://images.unsplash.com/photo-1511447333015-45b65e60f6d5?q=80&w=2564&auto=format&fit=crop", 
            "https://images.unsplash.com/photo-1506744626753-1fa28f673fac?q=80&w=2070&auto=format&fit=crop", "https://images.unsplash.com/photo-1478760329108-5c3ed9d495a0?q=80&w=2574&auto=format&fit=crop", 
            "https://images.unsplash.com/photo-1519608487953-e999c86e7455?q=80&w=2070&auto=format&fit=crop", "https://images.unsplash.com/photo-1493246507139-91e8fad9978e?q=80&w=2070&auto=format&fit=crop"  
        ];
        const accentColors = ['#a855f7', '#38bdf8', '#10b981', '#f43f5e', '#fbbf24', '#f97316'];
        let currentWP = 0; let currentAccentIdx = 0;

        function applyWallpaper(idx) { currentWP = idx; document.body.style.backgroundImage = `url('${wallpapers[idx]}')`; localStorage.setItem('puemex_wp_final', idx); updateThemeSelections(); }
        function applyCustomWallpaper(url) { if(!url.trim()) return; document.body.style.backgroundImage = `url('${url}')`; localStorage.setItem('puemex_wp_final', url); document.querySelectorAll('.theme-wp-item').forEach(el => el.classList.remove('active')); }
        async function fetchRandomWallpaper() { const btn = document.getElementById('btn-random-wp'); const originalText = btn.innerHTML; btn.innerHTML = '<i class="fas fa-circle-notch fa-spin"></i> Aranıyor...'; try { const res = await fetch('https://picsum.photos/1920/1080'); applyCustomWallpaper(res.url); showToast('Sistem', 'Yeni rastgele duvar kağıdı ayarlandı!', 'fas fa-magic', '#10b981'); } catch(e) { showToast('Hata', 'Resim çekilemedi.', 'fas fa-exclamation-triangle', '#f43f5e'); } btn.innerHTML = originalText; }
        function applyAccentColor(idx) { currentAccentIdx = idx; document.documentElement.style.setProperty('--accent', accentColors[idx]); localStorage.setItem('puemex_accent_color', idx); updateThemeSelections(); }
        function updateThemeSelections() { document.querySelectorAll('.theme-wp-item').forEach((el, i) => { if(i === currentWP && !isNaN(localStorage.getItem('puemex_wp_final'))) el.classList.add('active'); else el.classList.remove('active'); }); document.querySelectorAll('.theme-color-item').forEach((el, i) => { if(i === currentAccentIdx) el.classList.add('active'); else el.classList.remove('active'); }); }

        function renderWidgetToggles() {
            const container = document.getElementById('widget-toggles-container'); if(!container) return;
            const clockColor = osSettings.showClock ? 'var(--accent)' : 'rgba(255,255,255,0.1)'; const clockText = osSettings.showClock ? 'AÇIK' : 'KAPALI';
            const noteColor = osSettings.showQuickNote ? 'var(--accent)' : 'rgba(255,255,255,0.1)'; const noteText = osSettings.showQuickNote ? 'AÇIK' : 'KAPALI';
            const calColor = osSettings.showCalendarWidget ? 'var(--accent)' : 'rgba(255,255,255,0.1)'; const calText = osSettings.showCalendarWidget ? 'AÇIK' : 'KAPALI';
            const newsColor = osSettings.showNewsWidget ? 'var(--accent)' : 'rgba(255,255,255,0.1)'; const newsText = osSettings.showNewsWidget ? 'AÇIK' : 'KAPALI';

            container.innerHTML = `
                <div style="display:flex; justify-content:space-between; align-items:center; background:rgba(255,255,255,0.03); padding:10px 15px; border-radius:10px; margin-bottom:8px; border:1px solid rgba(255,255,255,0.05);">
                    <span style="color:#e2e8f0; font-weight:600; font-size:0.85rem;"><i class="fas fa-clock" style="color:#38bdf8; width:20px;"></i> Saat Aracı</span>
                    <button onclick="toggleWidget('showClock')" style="background:${clockColor}; color:#fff; border:none; padding:6px 12px; border-radius:8px; cursor:pointer; font-weight:700; font-size:0.75rem; transition:0.2s; min-width:70px;">${clockText}</button>
                </div>
                <div style="display:flex; justify-content:space-between; align-items:center; background:rgba(255,255,255,0.03); padding:10px 15px; border-radius:10px; margin-bottom:8px; border:1px solid rgba(255,255,255,0.05);">
                    <span style="color:#e2e8f0; font-weight:600; font-size:0.85rem;"><i class="fas fa-thumbtack" style="color:#fbbf24; width:20px;"></i> Hızlı Not Aracı</span>
                    <button onclick="toggleWidget('showQuickNote')" style="background:${noteColor}; color:#fff; border:none; padding:6px 12px; border-radius:8px; cursor:pointer; font-weight:700; font-size:0.75rem; transition:0.2s; min-width:70px;">${noteText}</button>
                </div>
                <div style="display:flex; justify-content:space-between; align-items:center; background:rgba(255,255,255,0.03); padding:10px 15px; border-radius:10px; margin-bottom:8px; border:1px solid rgba(255,255,255,0.05);">
                    <span style="color:#e2e8f0; font-weight:600; font-size:0.85rem;"><i class="fas fa-calendar-alt" style="color:#a855f7; width:20px;"></i> Takvim Aracı</span>
                    <button onclick="toggleWidget('showCalendarWidget')" style="background:${calColor}; color:#fff; border:none; padding:6px 12px; border-radius:8px; cursor:pointer; font-weight:700; font-size:0.75rem; transition:0.2s; min-width:70px;">${calText}</button>
                </div>
                <div style="display:flex; justify-content:space-between; align-items:center; background:rgba(255,255,255,0.03); padding:10px 15px; border-radius:10px; border:1px solid rgba(255,255,255,0.05);">
                    <span style="color:#e2e8f0; font-weight:600; font-size:0.85rem;"><i class="fas fa-rss" style="color:#f43f5e; width:20px;"></i> Haberler Aracı</span>
                    <button onclick="toggleWidget('showNewsWidget')" style="background:${newsColor}; color:#fff; border:none; padding:6px 12px; border-radius:8px; cursor:pointer; font-weight:700; font-size:0.75rem; transition:0.2s; min-width:70px;">${newsText}</button>
                </div>
            `;
        }

        function toggleWidget(widgetKey) { osSettings[widgetKey] = !osSettings[widgetKey]; saveOsSettings(); renderWidgetToggles(); }

        function openThemeSettings() {
            document.getElementById('desktop-context-menu').style.display = 'none'; const themeId = 'theme-settings';
            if (document.getElementById('win-' + themeId)) { const w = document.getElementById('win-' + themeId); w.style.display = 'flex'; focusWindow(w); updateThemeSelections(); renderWidgetToggles(); return; }
            const w = document.createElement('div'); w.id = 'win-' + themeId; w.className = 'window'; w.style.left = '20%'; w.style.top = '10%'; w.style.width = '600px'; w.style.height = '550px';
            let wpGrid = '<div class="theme-wp-grid">'; wallpapers.forEach((url, idx) => { wpGrid += `<div onclick="applyWallpaper(${idx}); showToast('Sistem', 'Arka plan değiştirildi.', 'fas fa-image', '#38bdf8');" style="background-image:url('${url}');" class="theme-wp-item" id="wp-thumb-${idx}"></div>`; }); wpGrid += '</div>';
            let colorGrid = '<div class="theme-color-row">'; accentColors.forEach((color, idx) => { colorGrid += `<div onclick="applyAccentColor(${idx}); showToast('Sistem', 'Tema rengi güncellendi.', 'fas fa-palette', '${color}');" style="background-color:${color}; color:${color};" class="theme-color-item" id="color-thumb-${idx}"></div>`; }); colorGrid += '</div>';

            w.innerHTML = `
                <div class="window-header" onmousedown="startWinDrag(event, this.parentElement)">
                    <div class="window-title"><i class="fas fa-paint-brush" style="color:#ec4899"></i> Kişiselleştirme Merkezi</div>
                    <div class="window-controls"><button class="win-btn win-close" onclick="closeWin('${themeId}')"><i class="fas fa-times"></i></button></div>
                </div>
                <div class="window-content" style="background:rgba(10,10,10,0.8); overflow-y:auto; display:flex; flex-direction:column;">
                    <h4 class="theme-section-title">Tema Rengi</h4>${colorGrid}
                    <div class="task-divider" style="width:100%; height:1px; margin:0; background:rgba(255,255,255,0.1);"></div>
                    <h4 class="theme-section-title" style="padding-top:15px;">Masaüstü Araçları</h4><div id="widget-toggles-container" style="padding:10px 15px;"></div>
                    <div class="task-divider" style="width:100%; height:1px; margin:0; background:rgba(255,255,255,0.1);"></div>
                    <h4 class="theme-section-title" style="padding-top:15px;">Özel Duvar Kağıdı</h4>
                    <div style="display:flex; gap:8px; padding:10px 15px; flex-wrap:wrap;">
                        <input type="text" id="custom-wp-url" placeholder="Resim URL'sini yapıştır..." style="flex:1; min-width:180px; background:rgba(0,0,0,0.5); border:1px solid var(--border); color:#fff; padding:8px 12px; border-radius:8px; outline:none; font-family:'Inter',sans-serif; font-size:0.85rem;">
                        <button onclick="applyCustomWallpaper(document.getElementById('custom-wp-url').value); showToast('Sistem', 'Özel duvar kağıdı uygulandı.', 'fas fa-image', '#38bdf8');" style="background:var(--accent); color:#fff; border:none; padding:8px 15px; border-radius:8px; cursor:pointer; font-weight:700; transition:0.2s; font-size:0.85rem;">Uygula</button>
                        <button id="btn-random-wp" onclick="fetchRandomWallpaper()" style="background:linear-gradient(135deg, #f43f5e, #f97316); color:#fff; border:none; padding:8px 15px; border-radius:8px; cursor:pointer; font-weight:700; transition:0.2s; display:flex; align-items:center; gap:6px; font-size:0.85rem;"><i class="fas fa-magic"></i> Sürpriz Yap</button>
                    </div>
                    <h4 class="theme-section-title">Galeriden Seç</h4>${wpGrid}
                </div>`;
            w.addEventListener('mousedown', () => focusWindow(w)); document.body.appendChild(w); focusWindow(w); addTaskbarIcon(themeId, 'fas fa-paint-brush', '#ec4899', 'Kişiselleştirme Merkezi'); updateThemeSelections(); renderWidgetToggles();
        }

        // --- PENCERE, ÇÖP, KLASÖR FONKSİYONLARI ---
        let zIndex = 100;
        function openApp(id, title, url, icon, color) { if (document.getElementById('win-' + id)) { const w = document.getElementById('win-' + id); w.style.display = 'flex'; focusWindow(w); return; } const w = document.createElement('div'); w.id = 'win-' + id; w.className = 'window'; w.style.left = '15%'; w.style.top = '10%'; w.style.width = '60%'; w.style.height = '65%'; w.innerHTML = `<div class="window-header" onmousedown="startWinDrag(event, this.parentElement)"><div class="window-title"><i class="${icon}" style="color:${color}"></i> ${title}</div><div class="window-controls"><button class="win-btn win-min" title="Küçült" onclick="minimizeWin('${id}')"><i class="fas fa-minus"></i></button><button class="win-btn win-max" title="Büyüt" onclick="maximizeWin('${id}')"><i class="far fa-square"></i></button><button class="win-btn win-close" title="Kapat" onclick="closeWin('${id}')"><i class="fas fa-times"></i></button></div></div><div class="window-content"><iframe src="${url}"></iframe><div class="resizer" onmousedown="initResize(event, this.parentElement.parentElement)"></div></div>`; w.addEventListener('mousedown', () => focusWindow(w)); document.body.appendChild(w); focusWindow(w); addTaskbarIcon(id, icon, color, title); }
        function focusWindow(w) { zIndex++; w.style.zIndex = zIndex; document.querySelectorAll('.task-btn').forEach(b => b.classList.remove('active')); const tid = w.id.replace('win-', 'task-'); if(document.getElementById(tid)) document.getElementById(tid).classList.add('active'); }
        function addTaskbarIcon(id, icon, color, title) { if (document.getElementById('task-' + id)) return; const b = document.createElement('div'); b.id = 'task-' + id; b.className = 'task-btn active'; b.title = title; b.innerHTML = `<i class="${icon}" style="color:${color}"></i>`; b.onclick = () => { const w = document.getElementById('win-' + id); if (w.style.display === 'none') { w.style.display = 'flex'; focusWindow(w); } else if (w.style.zIndex != zIndex) { focusWindow(w); } else { minimizeWin(id); } }; document.getElementById('taskbar-apps').appendChild(b); }
        function closeWin(id) { document.getElementById('win-' + id).remove(); if(document.getElementById('task-' + id)) document.getElementById('task-' + id).remove(); }
        function minimizeWin(id) { document.getElementById('win-' + id).style.display = 'none'; document.getElementById('task-' + id).classList.remove('active'); }
        function maximizeWin(id) { const w = document.getElementById('win-' + id); if (w.style.width === '100%') { w.style.width = '60%'; w.style.height = '65%'; w.style.left = '150px'; w.style.top = '80px'; } else { w.style.width = '100%'; w.style.height = 'calc(100vh - 48px)'; w.style.left = '0'; w.style.top = '0'; } }
        function startWinDrag(e, w) { if (e.target.closest('.window-controls')) return; focusWindow(w); let dX = e.clientX - w.offsetLeft, dY = e.clientY - w.offsetTop; document.body.classList.add('is-dragging'); w.classList.add('is-dragging'); function move(e) { w.style.left = (e.clientX - dX) + 'px'; w.style.top = (e.clientY - dY) + 'px'; } function stop(e) { document.removeEventListener('mousemove', move); document.removeEventListener('mouseup', stop); document.body.classList.remove('is-dragging'); w.classList.remove('is-dragging'); const edge = 25; if (e.clientX < edge) { w.style.left = '0'; w.style.top = '0'; w.style.width = '50%'; w.style.height = 'calc(100vh - 48px)'; } else if (e.clientX > window.innerWidth - edge) { w.style.left = '50%'; w.style.top = '0'; w.style.width = '50%'; w.style.height = 'calc(100vh - 48px)'; } else if (e.clientY < edge) { w.style.left = '0'; w.style.top = '0'; w.style.width = '100%'; w.style.height = 'calc(100vh - 48px)'; } } document.addEventListener('mousemove', move); document.addEventListener('mouseup', stop); }

        function openVirtualFolder(id, title, iconClass, color) { let winId = 'win-' + id; if (document.getElementById(winId)) { const w = document.getElementById(winId); w.style.display = 'flex'; focusWindow(w); refreshFolderView(winId); return; } folderNavHistory[winId] = [id]; const w = document.createElement('div'); w.id = winId; w.className = 'window'; w.style.left = '25%'; w.style.top = '20%'; w.style.width = '55%'; w.style.height = '65%'; w.innerHTML = `<div class="window-header" onmousedown="startWinDrag(event, this.parentElement)"><div class="window-title" id="win-title-${winId}"><i class="${iconClass}" style="color:${color}"></i> ${title}</div><div class="window-controls"><button class="win-btn win-min" onclick="minimizeWin('${id}')"><i class="fas fa-minus"></i></button><button class="win-btn win-max" onclick="maximizeWin('${id}')"><i class="far fa-square"></i></button><button class="win-btn win-close" onclick="closeWin('${id}')"><i class="fas fa-times"></i></button></div></div><div class="folder-toolbar"><button class="f-btn" id="btn-back-${winId}" onclick="navFolderBack('${winId}')" title="Geri Dön"><i class="fas fa-arrow-left"></i></button><div class="task-divider"></div><span class="f-path" id="f-path-${winId}">/${title}</span></div><div class="window-content" style="background:#0a0a0a; display:flex; flex-direction:column;"><div id="vfolder-content-${winId}" style="flex:1; position:relative; overflow-y:auto; padding:20px; display:flex; flex-wrap:wrap; gap:25px; align-content:flex-start;"></div><div class="resizer" onmousedown="initResize(event, this.parentElement.parentElement)"></div></div>`; w.addEventListener('mousedown', () => focusWindow(w)); document.body.appendChild(w); focusWindow(w); addTaskbarIcon(id, iconClass, color, title); refreshFolderView(winId); }
        function refreshFolderView(winId) { let contentDiv = document.getElementById('vfolder-content-' + winId); if(!contentDiv) return; let history = folderNavHistory[winId]; let currentFolderId = history[history.length - 1]; let currentFolderData = vfs.find(v => v.id === currentFolderId); document.getElementById('btn-back-' + winId).disabled = history.length <= 1; document.getElementById('f-path-' + winId).innerText = currentFolderData ? '/' + currentFolderData.title : '/Bilinmeyen'; let children = vfs.filter(f => f.parentId === currentFolderId && !f.isTrashed); if (children.length === 0) { contentDiv.innerHTML = `<div style="width:100%; padding:50px; color:#555; text-align:center;"><i class="fas fa-folder-open fa-3x" style="opacity:0.3; margin-bottom:15px; display:block;"></i>Klasör Boş<br><small style="font-size:0.75rem;">Sağ tıklayarak yeni dosya oluşturun</small></div>`; return; } let html = ''; children.forEach(c => { let iconClass = c.type === 'folder' ? 'fas fa-folder' : 'fas fa-file-alt'; let color = c.type === 'folder' ? '#fbbf24' : '#e2e8f0'; let dblclick = c.type === 'folder' ? `navFolderForward('${winId}', '${c.id}')` : `openVirtualTxt('${c.id}', '${c.title}', '${iconClass}', '${color}')`; html += `<div class="custom-vfs" id="${c.id}" style="width:75px; display:flex; flex-direction:column; align-items:center; cursor:pointer; text-align:center; padding:8px; border-radius:8px;" ondblclick="${dblclick}"><i class="${iconClass}" style="color:${color}; font-size:3rem; margin-bottom:6px; filter:drop-shadow(0 4px 6px rgba(0,0,0,0.5));"></i><span style="color:#fff; font-size:0.75rem; font-weight:600; word-break:break-word;">${c.title}</span></div>`; }); contentDiv.innerHTML = html; }
        function navFolderForward(winId, targetFolderId) { folderNavHistory[winId].push(targetFolderId); refreshFolderView(winId); }
        function navFolderBack(winId) { if (folderNavHistory[winId].length > 1) { folderNavHistory[winId].pop(); refreshFolderView(winId); } }

        let desktopNoteTimeouts = {};
        function makroIleKaydet(id, title, icerik) { localStorage.setItem('puemex_txt_' + id, icerik); clearTimeout(desktopNoteTimeouts[id]); desktopNoteTimeouts[id] = setTimeout(() => { const fd = new FormData(); fd.append('id', id); fd.append('title', title); fd.append('icerik', icerik); fd.append('action', 'sync_desktop_note'); fetch('api_sync', { method: 'POST', body: fd }).then(res => res.json()).then(data => { if(data.status === 'success') { console.log("Senkronize Edildi: " + title); } }).catch(e => console.log("Senkronizasyon bekleniyor...")); }, 1000); }
        function openVirtualTxt(id, title, iconClass, color) { if (document.getElementById('win-' + id)) { const w = document.getElementById('win-' + id); w.style.display = 'flex'; focusWindow(w); return; } const w = document.createElement('div'); w.id = 'win-' + id; w.className = 'window'; w.style.left = '35%'; w.style.top = '25%'; w.style.width = '450px'; w.style.height = '400px'; const savedContent = localStorage.getItem('puemex_txt_' + id) || ''; w.innerHTML = `<div class="window-header" onmousedown="startWinDrag(event, this.parentElement)"><div class="window-title"><i class="${iconClass}" style="color:${color}"></i> ${title}</div><div class="window-controls"><button class="win-btn win-min" onclick="minimizeWin('${id}')"><i class="fas fa-minus"></i></button><button class="win-btn win-max" onclick="maximizeWin('${id}')"><i class="far fa-square"></i></button><button class="win-btn win-close" onclick="closeWin('${id}')"><i class="fas fa-times"></i></button></div></div><div class="window-content" style="background:#0a0a0a; display:flex; flex-direction:column; position:relative;"><div id="editor-${id}"></div><div class="resizer" onmousedown="initResize(event, this.parentElement.parentElement)"></div></div>`; w.addEventListener('mousedown', () => focusWindow(w)); document.body.appendChild(w); focusWindow(w); addTaskbarIcon(id, iconClass, color, title); var quill = new Quill('#editor-' + id, { theme: 'snow', placeholder: 'Buraya notunu yaz...', modules: { toolbar: [ ['bold', 'italic', 'underline', 'strike'], [{ 'list': 'ordered'}, { 'list': 'bullet' }], [{ 'color': [] }, { 'background': [] }], ['clean'] ] } }); if (savedContent) { quill.clipboard.dangerouslyPasteHTML(savedContent); } quill.on('text-change', function() { let htmlIcerik = quill.root.innerHTML; if(quill.getText().trim() === '') htmlIcerik = ''; makroIleKaydet(id, title, htmlIcerik); }); }

        function deleteCustomIcon() { document.getElementById('icon-context-menu').style.display = 'none'; if (!activeContextIconId) return; let itemIndex = vfs.findIndex(v => v.id === activeContextIconId); if (itemIndex > -1) { let name = vfs[itemIndex].title; vfs[itemIndex].isTrashed = true; saveVFS(); renderDesktopVfs(); showToast('Çöpe Taşındı', `'${name}' çöp kutusuna gönderildi.`, 'fas fa-trash', '#f43f5e'); let win = document.getElementById('win-' + activeContextIconId); if(win) closeWin(activeContextIconId); if(vfs[itemIndex].parentId !== 'root') { for(let wId in folderNavHistory) { let h = folderNavHistory[wId]; if(h[h.length-1] === vfs[itemIndex].parentId) refreshFolderView(wId); } } } }
        function openTrashWindow() { const trashId = 'trash-bin'; if (document.getElementById('win-' + trashId)) { const w = document.getElementById('win-' + trashId); w.style.display = 'flex'; focusWindow(w); renderTrashItems(); return; } const w = document.createElement('div'); w.id = 'win-' + trashId; w.className = 'window'; w.style.left = '20%'; w.style.top = '15%'; w.style.width = '60%'; w.style.height = '65%'; w.innerHTML = `<div class="window-header" onmousedown="startWinDrag(event, this.parentElement)"><div class="window-title"><i class="fas fa-trash-alt" style="color:#94a3b8"></i> Çöp Kutusu</div><div class="window-controls"><button class="win-btn win-min" onclick="minimizeWin('${trashId}')"><i class="fas fa-minus"></i></button><button class="win-btn win-close" onclick="closeWin('${trashId}')"><i class="fas fa-times"></i></button></div></div><div class="folder-toolbar" style="justify-content: flex-end;"><button onclick="emptyTrash()" style="background:#f43f5e; color:#fff; border:none; padding:6px 12px; border-radius:8px; font-weight:bold; cursor:pointer; font-size:0.8rem;">Kutuyu Boşalt</button></div><div class="window-content" style="background:#0a0a0a; display:flex; flex-direction:column;"><div id="trash-content" style="flex:1; overflow-y:auto;"></div><div class="resizer" onmousedown="initResize(event, this.parentElement.parentElement)"></div></div>`; w.addEventListener('mousedown', () => focusWindow(w)); document.body.appendChild(w); focusWindow(w); addTaskbarIcon(trashId, 'fas fa-trash-alt', '#94a3b8', 'Çöp Kutusu'); renderTrashItems(); }
        function renderTrashItems() { const content = document.getElementById('trash-content'); if(!content) return; const trashedItems = vfs.filter(v => v.isTrashed === true); if(trashedItems.length === 0) { content.innerHTML = `<div style="padding:50px; color:#555; text-align:center;"><i class="fas fa-trash fa-3x" style="opacity:0.3; margin-bottom:15px; display:block;"></i>Çöp Kutusu Boş</div>`; return; } let html = `<div style="display:flex; flex-wrap:wrap; gap:25px; padding:20px; align-content:flex-start;">`; trashedItems.forEach(c => { let iconClass = c.type === 'folder' ? 'fas fa-folder' : (c.type === 'app' ? 'fas fa-rocket' : 'fas fa-file-alt'); html += `<div style="width:70px; display:flex; flex-direction:column; align-items:center; cursor:pointer; text-align:center;" ondblclick="restoreTrashItem('${c.id}')" title="Geri yüklemek için çift tıkla"><i class="${iconClass}" style="color:#94a3b8; font-size:2.2rem; margin-bottom:8px; opacity:0.5;"></i><span style="color:#fff; font-size:0.7rem; text-decoration:line-through;">${c.title}</span></div>`; }); content.innerHTML = html + `</div>`; }
        function restoreTrashItem(id) { let idx = vfs.findIndex(v => v.id === id); if(idx > -1) { let name = vfs[idx].title; vfs[idx].isTrashed = false; saveVFS(); renderTrashItems(); renderDesktopVfs(); showToast('Geri Yüklendi', `'${name}' kurtarıldı.`, 'fas fa-undo', '#10b981'); } }
        function emptyTrash() { if(confirm("Kalıcı olarak silinecek. Emin misiniz?")) { vfs = vfs.filter(v => v.isTrashed !== true); saveVFS(); renderTrashItems(); showToast('Temizlik', 'Çöp kutusu boşaltıldı.', 'fas fa-broom', '#38bdf8'); } }

        let promptActionType = '';
        function openRenamePrompt() { document.getElementById('icon-context-menu').style.display = 'none'; if (!activeContextIconId) return; let itemIndex = vfs.findIndex(v => v.id === activeContextIconId); if (itemIndex === -1) return; promptActionType = 'rename'; document.getElementById('os-prompt-title').innerText = 'Yeni Adı Girin'; const inp = document.getElementById('os-prompt-input'); inp.value = vfs[itemIndex].title; document.getElementById('os-prompt-modal').style.display = 'flex'; setTimeout(() => { inp.focus(); inp.select(); }, 100); }
        function openPrompt(type) { document.getElementById('desktop-context-menu').style.display = 'none'; promptActionType = type; document.getElementById('os-prompt-title').innerText = type === 'folder' ? 'Klasör Adını Girin' : 'Belge Adını Girin'; const inp = document.getElementById('os-prompt-input'); inp.value = type === 'folder' ? 'Yeni Klasör' : 'Yeni Not'; document.getElementById('os-prompt-modal').style.display = 'flex'; setTimeout(() => { inp.focus(); inp.select(); }, 100); }
        function closeOsPrompt() { document.getElementById('os-prompt-modal').style.display = 'none'; }
        function confirmOsPrompt() { let val = document.getElementById('os-prompt-input').value.trim(); if(!val) return; closeOsPrompt(); if (promptActionType === 'rename') { let idx = vfs.findIndex(v => v.id === activeContextIconId); if (idx > -1) { vfs[idx].title = val; saveVFS(); renderDesktopVfs(); let winTitle = document.querySelector(`#win-${activeContextIconId} .window-title`); if (winTitle) winTitle.innerHTML = winTitle.innerHTML.split('</i>')[0] + '</i> ' + val; for(let wId in folderNavHistory) { let h = folderNavHistory[wId]; if(h[h.length-1] === vfs[idx].parentId) refreshFolderView(wId); } showToast('Başarılı', 'İsim değiştirildi.', 'fas fa-check', '#10b981'); } } else { let id = 'custom-' + promptActionType + '-' + Date.now(); vfs.push({ id: id, type: promptActionType, title: val, left: contextTargetFolderId === 'root' ? contextX + 'px' : 'auto', top: contextTargetFolderId === 'root' ? contextY + 'px' : 'auto', parentId: contextTargetFolderId, isTrashed: false }); saveVFS(); if(contextTargetFolderId === 'root') { renderDesktopVfs(); } else { for(let wId in folderNavHistory) { let h = folderNavHistory[wId]; if(h[h.length-1] === contextTargetFolderId) refreshFolderView(wId); } } showToast('Oluşturuldu', `'${val}' oluşturuldu.`, promptActionType === 'folder' ? 'fas fa-folder' : 'fas fa-file-alt', promptActionType === 'folder' ? '#fbbf24' : '#e2e8f0'); } }

        function startIconDrag(e, icon) { if (e.button !== 0) return; if (e.target.tagName.toLowerCase() === 'textarea' || e.target.classList.contains('resizer') || e.target.closest('.ql-toolbar') || e.target.closest('.ql-editor')) return; if(window.innerWidth <= 768) return; let deskRect = document.getElementById('desktop').getBoundingClientRect(); let rect = icon.getBoundingClientRect(); let shiftX = e.clientX - rect.left; let shiftY = e.clientY - rect.top; let hasMoved = false; function onMouseMove(evt) { if (!hasMoved) { hasMoved = true; icon.style.right = 'auto'; icon.style.bottom = 'auto'; } icon.style.left = (evt.clientX - shiftX - deskRect.left) + 'px'; icon.style.top = (evt.clientY - shiftY - deskRect.top) + 'px'; } document.addEventListener('mousemove', onMouseMove); document.onmouseup = function(evt) { document.removeEventListener('mousemove', onMouseMove); document.onmouseup = null; if (hasMoved) { let finalRect = icon.getBoundingClientRect(); if (finalRect.left > window.innerWidth / 2) { icon.style.right = (window.innerWidth - finalRect.right) + 'px'; icon.style.left = 'auto'; } else { icon.style.left = finalRect.left + 'px'; icon.style.right = 'auto'; } if (finalRect.top > window.innerHeight / 2) { icon.style.bottom = (window.innerHeight - finalRect.bottom) + 'px'; icon.style.top = 'auto'; } else { icon.style.top = finalRect.top + 'px'; icon.style.bottom = 'auto'; } } if (hasMoved) { if(icon.classList.contains('custom-vfs') && icon.parentElement.id === 'desktop') { icon.style.visibility = 'hidden'; let elemBelow = document.elementFromPoint(evt.clientX, evt.clientY); icon.style.visibility = 'visible'; let targetFolder = elemBelow ? elemBelow.closest('.custom-vfs[id*="folder"]') : null; let itemIndex = vfs.findIndex(v => v.id === icon.id); if (itemIndex > -1) { if (targetFolder && targetFolder.id !== icon.id) { vfs[itemIndex].parentId = targetFolder.id; if(document.getElementById('win-' + targetFolder.id)) refreshFolderView('win-' + targetFolder.id); } else { vfs[itemIndex].left = icon.style.left; vfs[itemIndex].top = icon.style.top; vfs[itemIndex].right = icon.style.right; vfs[itemIndex].bottom = icon.style.bottom; } saveVFS(); renderDesktopVfs(); } } else { savePositions(); } } }; }
        function initResize(e, w) { e.preventDefault(); focusWindow(w); document.body.classList.add('is-dragging'); let startX = e.clientX; let startY = e.clientY; let startW = w.offsetWidth; let startH = w.offsetHeight; function res(e) { w.style.width = (startW + e.clientX - startX) + 'px'; w.style.height = (startH + e.clientY - startY) + 'px'; } function stp() { window.removeEventListener('mousemove', res); window.removeEventListener('mouseup', stp); document.body.classList.remove('is-dragging'); savePositions(); } window.addEventListener('mousemove', res); window.addEventListener('mouseup', stp); }
        function initWidgetResize(e, widget) { e.preventDefault(); e.stopPropagation(); document.body.classList.add('is-dragging'); let startX = e.clientX; let startY = e.clientY; let startW = widget.offsetWidth; let startH = widget.offsetHeight; function res(e) { widget.style.width = (startW + e.clientX - startX) + 'px'; widget.style.height = (startH + e.clientY - startY) + 'px'; } function stp() { window.removeEventListener('mousemove', res); window.removeEventListener('mouseup', stp); document.body.classList.remove('is-dragging'); savePositions(); } window.addEventListener('mousemove', res); window.addEventListener('mouseup', stp); }
        function savePositions() { const pos = {}; document.querySelectorAll('.custom-vfs, #clock-widget, #quick-note-widget, #calendar-widget, #news-widget, #icon-trash').forEach(el => { let data = { left: el.style.left, top: el.style.top, right: el.style.right, bottom: el.style.bottom }; if(el.id === 'clock-widget' || el.id === 'quick-note-widget' || el.id === 'calendar-widget' || el.id === 'news-widget') { data.width = el.style.width; data.height = el.style.height; } pos[el.id] = data; }); localStorage.setItem('puemex_positions_v12', JSON.stringify(pos)); }
        
        function loadPositionsAndIcons() {
            const saved = localStorage.getItem('puemex_positions_v12');
            if (saved) { 
                const pos = JSON.parse(saved); 
                for (let id in pos) { 
                    const el = document.getElementById(id); 
                    if (el && pos[id]) { 
                        if(pos[id].left) el.style.left = pos[id].left; 
                        if(pos[id].top) el.style.top = pos[id].top; 
                        if(pos[id].right) el.style.right = pos[id].right; 
                        if(pos[id].bottom) el.style.bottom = pos[id].bottom; 
                        if(pos[id].width) el.style.width = pos[id].width; 
                        if(pos[id].height) el.style.height = pos[id].height; 
                    } 
                } 
            }
            const sAcc = localStorage.getItem('puemex_accent_color'); if(sAcc !== null) { currentAccentIdx = parseInt(sAcc); applyAccentColor(currentAccentIdx); } else { applyAccentColor(0); }
            applyOsSettings(); 
            renderDesktopVfs();
        }

        // --- ARAMA ---
        function searchSystem(val) { const resPanel = document.getElementById('search-results'); val = val.trim(); if (!val) { resPanel.style.display = 'none'; return; } let html = ''; const vL = val.toLowerCase(); document.querySelectorAll('.desktop-icon').forEach(icon => { const title = icon.querySelector('span').innerText; if (title.toLowerCase().includes(vL)) { const iC = icon.querySelector('i').className; const color = icon.querySelector('i').style.color; const click = icon.getAttribute('ondblclick'); html += `<div class="search-result-item" onclick="closeS(); ${click}"><i class="${iC}" style="color:${color};"></i><div class="search-result-info"><span class="search-result-title">${title}</span><span class="search-result-type">UYGULAMA / DOSYA</span></div></div>`; } }); resPanel.innerHTML = html + `<div style="padding:15px; color:#888; text-align:center; font-size:0.8rem;"><i class="fas fa-circle-notch fa-spin"></i> Derin tarama yapılıyor...</div>`; resPanel.style.display = 'flex'; clearTimeout(searchTimeout); searchTimeout = setTimeout(async () => { try { const fd = new FormData(); fd.append('action', 'global_search'); fd.append('term', val); const r = await fetch('masaustu', { method: 'POST', body: fd }); const d = await r.json(); let fH = html; if(d && d.length > 0) { d.forEach(item => { fH += `<div class="search-result-item" onclick="closeS(); openApp('${item.app}', '${item.app.toUpperCase()}', '${item.url}', '${item.icon}', '${item.color}')"><i class="${item.icon}" style="color:${item.color};"></i><div class="search-result-info"><span class="search-result-title">${item.title}</span><span class="search-result-type">${item.app} İÇİNDE</span></div></div>`; }); } else if (html === '') fH = '<div style="padding:20px; color:#888; text-align:center;">Sonuç bulunamadı</div>'; resPanel.innerHTML = fH; } catch(e) { resPanel.innerHTML = html || 'Hata oluştu'; } }, 400); }
        function closeS() { document.getElementById('omniboxInput').value = ''; document.getElementById('search-results').style.display = 'none'; }

        // --- YAPAY ZEKA PANELİ ---
        function toggleGlobalAI() { const p = document.getElementById('globalAiPanel'); if(p.classList.contains('show')) p.classList.remove('show'); else { p.classList.add('show'); document.getElementById('globalAiInput').focus(); } }
        async function sendGlobalAIMessage() { const i = document.getElementById('globalAiInput'); const c = document.getElementById('globalAiChat'); const t = i.value.trim(); if(!t) return; i.value = ''; const uM = document.createElement('div'); uM.className = 'ai-msg user'; uM.textContent = t; c.appendChild(uM); c.scrollTop = c.scrollHeight; const aM = document.createElement('div'); aM.className = 'ai-msg ai'; aM.innerHTML = '<i class="fas fa-circle-notch fa-spin"></i> İşleniyor...'; c.appendChild(aM); c.scrollTop = c.scrollHeight; try { const r = await fetch('api_ai', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ prompt: t }) }); const d = await r.json(); aM.innerHTML = d.error ? d.error : d.response.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>').replace(/\n/g, '<br>'); } catch (e) { aM.textContent = "Sisteme ulaşılamıyor."; } c.scrollTop = c.scrollHeight; }

        // --- SİSTEM BAŞLATMA ---
        window.onload = () => { 
            loadPositionsAndIcons(); 
            loadQuickNote(); 
            loadWidgetEvents(); 
            loadWidgetNews(); 
            renderStartMenu();
            
            setInterval(() => { const n = new Date(); document.getElementById('clock-time-main').textContent = n.getHours().toString().padStart(2,'0') + ":" + n.getMinutes().toString().padStart(2,'0'); }, 1000);

            const savedWP = localStorage.getItem('puemex_wp_final'); 
            if(savedWP !== null) {
                if(savedWP.startsWith('http') || savedWP.startsWith('data:')) { applyCustomWallpaper(savedWP); } 
                else { applyWallpaper(parseInt(savedWP)); }
            } else { applyWallpaper(0); }
        };
    </script>
</body>
</html>