Greasy Fork Pro X7P

Next-gen Greasy Fork enhancement suite: radial menu, smart drawer, command palette, live CSS editor, script tools, theme scheduler, focus mode.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Greasy Fork Pro X7P
// @namespace    http://tampermonkey.net/
// @version      99.2
// @description  Next-gen Greasy Fork enhancement suite: radial menu, smart drawer, command palette, live CSS editor, script tools, theme scheduler, focus mode.
// @author       Mustafa Hakan
// @match        *://greasyfork.org/*
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @grant        GM_notification
// @run-at       document-start
// @icon         data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0%25' y1='0%25' x2='100%25' y2='100%25'%3E%3Cstop offset='0%25' style='stop-color:%234a7db8'/%3E%3Cstop offset='100%25' style='stop-color:%232a4d6e'/%3E%3C/linearGradient%3E%3C/defs%3E%3Ccircle cx='50' cy='50' r='18' fill='none' stroke='url(%23g)' stroke-width='5'/%3E%3Cpath d='M35 50h30M50 35v30' stroke='%23fff' stroke-width='4' stroke-linecap='round'/%3E%3C/svg%3E
// ==/UserScript==

(function() {
  'use strict';

  const D = {
    en: {
      drawer: 'Control Panel',
      tab1: 'Look',
      tab2: 'Typo',
      tab3: 'Layout',
      tab4: 'Code',
      tab5: 'Tools',
      tab6: 'Keys',
      tab7: 'Meta',
      on: 'ON',
      off: 'OFF',
      reading: 'Reading Mode',
      compact: 'Compact',
      anim: 'Animations',
      stats: 'Stats Bar',
      copyBtn: 'Copy Code',
      srchHl: 'Search HL',
      wrap: 'Wrap Code',
      hover: 'Card Hover',
      grad: 'Gradient Header',
      contrast: 'High Contrast',
      autoTheme: 'Auto Theme',
      dark: 'Dark',
      light: 'Light',
      top: 'Back to Top',
      codeSrch: 'Search in Code',
      copyTitle: 'Copy Title',
      sched: 'Schedule Theme',
      set: 'Set',
      scripts: 'Scripts',
      theme: 'Theme',
      ver: 'Version',
      font: 'Font Size',
      width: 'Page Width',
      lh: 'Line Height',
      ls: 'Letter Spacing',
      ws: 'Word Spacing',
      fw: 'Font Weight',
      extLinks: 'Highlight External',
      installs: 'Install Counts',
      author: 'Author Badge',
      dates: 'Script Dates',
      sidebar: 'Hide Sidebar',
      fullCode: 'Full Width Code',
      invert: 'Invert Code',
      darkImg: 'Darken Images',
      blur: 'Blur Images',
      outline: 'Outline Links',
      shadow: 'Text Shadow',
      center: 'Center Content',
      uline: 'Underline Links',
      larger: 'Larger Targets',
      grayscale: 'Grayscale',
      sepia: 'Sepia',
      night: 'Night Light',
      removeCol: 'Remove Colors',
      monospace: 'Monospace All',
      justify: 'Justify Text',
      hideInstall: 'Hide Install',
      zen: 'Zen Mode',
      resetAll: 'Reset All',
      export: 'Export',
      import: 'Import',
      lang: 'Language',
      sortName: 'Sort by Name',
      sortDate: 'Sort by Date',
      sortRating: 'Sort by Rating',
      sortInstalls: 'Sort by Installs',
      resetSort: 'Reset Sort',
      copyLinks: 'Copy Links',
      openAll: 'Open All',
      copyInfo: 'Copy Info',
      focusSearch: 'Focus Search',
      topPage: 'Page Top',
      middle: 'Page Middle',
      bottom: 'Page Bottom',
      autoScroll: 'Auto Scroll',
      stopScroll: 'Stop Scroll',
      quickUp: 'Quick Up',
      quickDown: 'Quick Down',
      copyHeadings: 'Copy Headings',
      charCount: 'Char Count',
      wordCount: 'Word Count',
      readTime: 'Read Time'
    },
    tr: {
      drawer: 'Kontrol Paneli',
      tab1: 'Görünüm',
      tab2: 'Tipografi',
      tab3: 'Düzen',
      tab4: 'Kod',
      tab5: 'Araçlar',
      tab6: 'Tuşlar',
      tab7: 'Meta',
      on: 'AÇIK',
      off: 'KAPALI',
      reading: 'Okuma Modu',
      compact: 'Kompakt',
      anim: 'Animasyonlar',
      stats: 'İstatistik Çubuğu',
      copyBtn: 'Kodu Kopyala',
      srchHl: 'Arama Vurgusu',
      wrap: 'Kod Sarma',
      hover: 'Kart Vurgusu',
      grad: 'Gradyan Başlık',
      contrast: 'Yüksek Kontrast',
      autoTheme: 'Otomatik Tema',
      dark: 'Koyu',
      light: 'Açık',
      top: 'Başa Dön',
      codeSrch: 'Kodda Ara',
      copyTitle: 'Başlığı Kopyala',
      sched: 'Zamanlama',
      set: 'Ayarla',
      scripts: 'Betikler',
      theme: 'Tema',
      ver: 'Sürüm',
      font: 'Yazı Boyutu',
      width: 'Sayfa Genişliği',
      lh: 'Satır Yüksekliği',
      ls: 'Harf Aralığı',
      ws: 'Kelime Aralığı',
      fw: 'Yazı Kalınlığı',
      extLinks: 'Harici Linkler',
      installs: 'Kurulum Sayısı',
      author: 'Yazar Rozeti',
      dates: 'Betik Tarihi',
      sidebar: 'Kenar Çubuğu',
      fullCode: 'Tam Geniş Kod',
      invert: 'Ters Renk Kod',
      darkImg: 'Resim Karart',
      blur: 'Resim Bulanıklaştır',
      outline: 'Link Çerçevele',
      shadow: 'Yazı Gölgesi',
      center: 'Ortala',
      uline: 'Alt Çizgili Link',
      larger: 'Büyük Tıklama',
      grayscale: 'Gri Ton',
      sepia: 'Sepya',
      night: 'Gece Işığı',
      removeCol: 'Renkleri Kaldır',
      monospace: 'Monospace',
      justify: 'İki Yana Yasla',
      hideInstall: 'Kur Butonu Gizle',
      zen: 'Zen Modu',
      resetAll: 'Sıfırla',
      export: 'Dışa Aktar',
      import: 'İçe Aktar',
      lang: 'Dil',
      sortName: 'İsme Göre Sırala',
      sortDate: 'Tarihe Göre Sırala',
      sortRating: 'Puana Göre Sırala',
      sortInstalls: 'Kuruluma Göre Sırala',
      resetSort: 'Sıralamayı Sıfırla',
      copyLinks: 'Linkleri Kopyala',
      openAll: 'Hepsini Aç',
      copyInfo: 'Bilgileri Kopyala',
      focusSearch: 'Aramaya Odaklan',
      topPage: 'Sayfa Başı',
      middle: 'Sayfa Ortası',
      bottom: 'Sayfa Sonu',
      autoScroll: 'Otomatik Kaydır',
      stopScroll: 'Kaydırmayı Durdur',
      quickUp: 'Hızlı Yukarı',
      quickDown: 'Hızlı Aşağı',
      copyHeadings: 'Başlıkları Kopyala',
      charCount: 'Karakter Sayısı',
      wordCount: 'Kelime Sayısı',
      readTime: 'Okuma Süresi'
    }
  };

  let L = GM_getValue('lang','en');
  const _ = k => (D[L] && D[L][k]) ? D[L][k] : (D['en'][k] || k);

  const P = {
    bg: '#0f1a2e',
    bgL: '#152238',
    bgD: '#0a1220',
    txt: '#e0e8f0',
    muted: '#8090b0',
    acc: '#4a7db8',
    accS: '#5b8ec9',
    gold: '#5b8ec9',
    goldL: '#7aa8d8',
    border: 'rgba(255,255,255,0.08)',
    borderS: 'rgba(255,255,255,0.18)',
    shadow: '0 8px 24px rgba(0,0,0,0.6)',
    r: '14px',
    rs: '8px'
  };

  const DEF = {
    theme: 'dark',
    fontSize: '16px',
    reading: false,
    compact: false,
    anim: true,
    stats: true,
    srchHl: true,
    copyBtn: true,
    wrap: false,
    width: '900px',
    hover: true,
    autoTheme: false,
    contrast: false,
    grad: true,
    lh: '1.6',
    ls: '0px',
    ws: '0px',
    fw: '400',
    extLinks: false,
    installs: false,
    author: false,
    dates: false,
    schedDark: '',
    schedLight: '',
    invert: false,
    darkImg: false,
    blur: false,
    outline: false,
    shadow: false,
    center: false,
    uline: false,
    larger: false,
    grayscale: false,
    sepia: false,
    night: false,
    removeCol: false,
    monospace: false,
    justify: false,
    sidebar: false,
    fullCode: false,
    hideInstall: false,
    zen: false,
    charCount: false,
    wordCount: false,
    readTime: false,
    blueTheme: false,
    purpleTheme: false,
    orangeTheme: false
  };

  let S = {};
  for (let k in DEF) S[k] = GM_getValue(k, DEF[k]);
  const save = () => { for (let k in S) GM_setValue(k, S[k]); };

  function applyVars() {
    let s = document.documentElement.style;
    s.setProperty('--p-bg', P.bg);
    s.setProperty('--p-bgL', P.bgL);
    s.setProperty('--p-bgD', P.bgD);
    s.setProperty('--p-txt', P.txt);
    s.setProperty('--p-muted', P.muted);
    s.setProperty('--p-acc', S.blueTheme ? '#5a8ec0' : S.purpleTheme ? '#8b6bb8' : S.orangeTheme ? '#c8905a' : P.acc);
    s.setProperty('--p-accS', S.blueTheme ? '#7aa8d8' : S.purpleTheme ? '#a088c8' : S.orangeTheme ? '#d8a878' : P.accS);
    s.setProperty('--p-gold', S.blueTheme ? '#5a8ec0' : S.purpleTheme ? '#8b6bb8' : S.orangeTheme ? '#c8905a' : P.gold);
    s.setProperty('--p-goldL', S.blueTheme ? '#7aa8d8' : S.purpleTheme ? '#a088c8' : S.orangeTheme ? '#d8a878' : P.goldL);
    s.setProperty('--p-border', P.border);
    s.setProperty('--p-borderS', P.borderS);
    s.setProperty('--p-shadow', P.shadow);
    s.setProperty('--p-r', P.r);
    s.setProperty('--p-rs', P.rs);
    s.setProperty('--p-trans', S.anim ? '0.3s ease' : '0s');
  }

  function fullCSS() {
    let old = document.getElementById('elite-style');
    if (old) old.remove();
    let css = '*{box-sizing:border-box}body{font-family:system-ui,sans-serif;background:var(--p-bg);color:var(--p-txt);line-height:'+S.lh+';letter-spacing:'+S.ls+';word-spacing:'+S.ws+';font-weight:'+S.fw+';min-height:100vh;'+(S.grayscale?'filter:grayscale(100%);':'')+(S.sepia?'filter:sepia(80%);':'')+(S.night?'filter:brightness(0.8) sepia(20%);':'')+(S.removeCol?'filter:saturate(0);':'')+'}';
    css += 'a{color:var(--p-gold);text-decoration:none;'+(S.uline?'text-decoration:underline':'')+'}a:hover{color:var(--p-accS)}';
    css += '#main-header,.navbar,.top-bar{background:var(--p-bgD)!important;border-bottom:1px solid var(--p-border)!important;box-shadow:var(--p-shadow)!important;padding:12px 20px!important;position:sticky!important;top:0!important;z-index:900}';
    css += '.content,.main-content,#content,main,article{background:var(--p-bgL)!important;border-radius:var(--p-r)!important;border:1px solid var(--p-border)!important;padding:24px!important;margin:20px auto!important;max-width:'+S.width+'!important;box-shadow:var(--p-shadow)!important;'+(S.center?'margin-left:auto!important;margin-right:auto!important':'')+'}';
    css += '.card,.script-item,.script-list-item{background:var(--p-bgD)!important;border:1px solid var(--p-border)!important;border-radius:var(--p-r)!important;padding:16px!important;margin-bottom:12px!important;box-shadow:var(--p-shadow)!important;'+(S.larger?'padding:24px!important':'')+'}';
    if (S.hover) css += '.card:hover,.script-item:hover,.script-list-item:hover{transform:translateY(-2px)!important;box-shadow:0 12px 28px rgba(0,0,0,0.7)!important;border-color:var(--p-gold)!important}';
    css += 'button,.btn{background:var(--p-acc)!important;color:#fff!important;border:1px solid var(--p-gold)!important;border-radius:var(--p-rs)!important;padding:8px 14px!important;font-weight:600!important;cursor:pointer!important}';
    css += 'button:hover,.btn:hover{background:var(--p-goldL)!important}';
    css += 'input,textarea,select{background:var(--p-bgD)!important;border:1px solid var(--p-border)!important;border-radius:var(--p-rs)!important;padding:10px 14px!important;color:var(--p-txt)!important}';
    css += 'pre,code,.code,.highlight{background:var(--p-bgD)!important;border:1px solid var(--p-border)!important;border-radius:var(--p-rs)!important;padding:12px!important;font-family:"Fira Code",monospace!important;color:var(--p-txt)!important;white-space:'+(S.wrap?'pre-wrap':'pre')+'!important;'+(S.invert?'filter:invert(100%);':'')+(S.fullCode?'max-width:100%!important;width:100%!important':'')+'}';
    if (S.darkImg) css += 'img{filter:brightness(0.7)}';
    if (S.blur) css += 'img{filter:blur(8px);transition:filter 0.3s}img:hover{filter:blur(0)}';
    if (S.monospace) css += 'body,p,span,div,a,li,td,th{font-family:"Fira Code",monospace!important}';
    if (S.justify) css += 'p,div.content{text-align:justify!important}';
    if (S.sidebar) css += '.sidebar,.side-panel,aside,#sidebar{display:none!important}';
    if (S.outline) css += 'a{border:1px solid var(--p-gold)!important;padding:2px 4px!important;border-radius:3px!important}';
    if (S.shadow) css += 'body{text-shadow:0 1px 2px rgba(0,0,0,0.5)}';
    if (S.hideInstall) css += '.install-button,.btn-install,.install-link{display:none!important}';
    css += '#elite-stats{position:fixed;top:60px;right:20px;background:var(--p-bgD);border:1px solid var(--p-gold);border-radius:var(--p-rs);padding:8px 12px;font-size:0.8rem;color:var(--p-muted);z-index:950}';
    css += '#elite-fab{position:fixed;bottom:24px;right:24px;width:52px;height:52px;border-radius:50%;background:var(--p-acc);border:2px solid var(--p-gold);box-shadow:var(--p-shadow);cursor:pointer;z-index:1100;display:flex;align-items:center;justify-content:center}';
    css += '#elite-fab svg{width:28px;height:28px;fill:#fff}';
    css += '#elite-badge{position:fixed;bottom:80px;right:18px;background:var(--p-gold);color:#fff;padding:4px 10px;border-radius:20px;font-size:0.7rem;font-weight:700;letter-spacing:1px;z-index:1100}';
    css += '#elite-radial{position:fixed;bottom:60px;right:60px;width:160px;height:160px;z-index:1099;pointer-events:none}';
    css += '.elite-radial-item{position:absolute;width:44px;height:44px;border-radius:50%;background:var(--p-acc);border:2px solid var(--p-gold);display:flex;align-items:center;justify-content:center;cursor:pointer;pointer-events:auto;box-shadow:var(--p-shadow);color:#fff;transition:all 0.3s cubic-bezier(0,0,0.2,1);opacity:0;transform:scale(0)}';
    css += '.elite-radial-item.open{opacity:1;transform:scale(1)}';
    css += '.elite-radial-item:nth-child(1){top:0;left:50%;margin-left:-22px}.elite-radial-item:nth-child(2){top:50%;left:0;margin-top:-22px}.elite-radial-item:nth-child(3){top:50%;right:0;margin-top:-22px}';
    css += '#elite-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.4);z-index:1199;display:none}#elite-overlay.open{display:block}';
    css += '#elite-drawer{position:fixed;bottom:-100%;left:50%;transform:translateX(-50%);width:680px;max-width:95vw;height:78vh;background:var(--p-bgL);border:2px solid var(--p-gold);border-radius:24px 24px 0 0;box-shadow:var(--p-shadow);z-index:1200;transition:bottom 0.4s cubic-bezier(0,0,0.2,1);display:flex;flex-direction:column}#elite-drawer.open{bottom:0}';
    css += '#elite-drawer-head{padding:16px 20px;border-bottom:1px solid var(--p-border);display:flex;justify-content:space-between;align-items:center;font-weight:600;background:var(--p-bgD);border-radius:24px 24px 0 0}';
    css += '#elite-tabs{display:flex;flex-wrap:wrap;border-bottom:1px solid var(--p-border);background:var(--p-bg)}.elite-tab{flex:1;padding:10px 4px;text-align:center;cursor:pointer;font-weight:600;font-size:0.75rem;border-bottom:2px solid transparent;color:var(--p-muted);white-space:nowrap}.elite-tab.active{color:var(--p-gold);border-bottom-color:var(--p-gold)}';
    css += '#elite-content{flex:1;overflow-y:auto;padding:14px 20px}';
    css += '.elite-btn{display:flex;justify-content:space-between;align-items:center;width:100%;margin-bottom:6px;padding:10px 12px;background:var(--p-bg);border:1px solid var(--p-border);border-radius:var(--p-rs);cursor:pointer;font-weight:500;font-size:0.85rem}.elite-btn:hover{border-color:var(--p-gold);background:var(--p-bgD)}';
    css += '.elite-status{font-size:0.7rem;padding:2px 8px;border-radius:20px;font-weight:600}.elite-status.on{background:var(--p-acc);color:#fff}.elite-status.off{background:transparent;border:1px solid var(--p-borderS);color:var(--p-muted)}';
    css += '.elite-section{font-size:0.7rem;text-transform:uppercase;letter-spacing:1px;color:var(--p-muted);margin:12px 0 8px;border-bottom:1px solid var(--p-border);padding-bottom:4px}';
    css += 'input[type="range"]{-webkit-appearance:none;width:100%;height:6px;background:var(--p-bg);border-radius:3px;margin:8px 0}input[type="range"]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--p-gold);cursor:pointer;border:2px solid var(--p-bgD)}';
    css += '::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:var(--p-bgD)}::-webkit-scrollbar-thumb{background:var(--p-acc);border-radius:4px}';
    css += '@media(max-width:768px){#elite-drawer{width:100%;max-width:100%}#elite-fab{bottom:16px;right:16px}}';
    GM_addStyle(css);
    let a = document.querySelectorAll('style');
    if (a.length) a[a.length-1].id = 'elite-style';
  }

  let radialOpen = false, drawerOpen = false, autoScrollId;

  function createUI() {
    let badge = document.createElement('div'); badge.id='elite-badge'; badge.textContent='PRO'; document.body.appendChild(badge);
    let fab = document.createElement('div'); fab.id='elite-fab';
    fab.innerHTML = `<svg viewBox="0 0 24 24"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/></svg>`;
    fab.addEventListener('click', ()=>{ radialOpen=!radialOpen; document.querySelectorAll('.elite-radial-item').forEach(e=>e.classList.toggle('open',radialOpen)); });
    document.body.appendChild(fab);

    let radial = document.createElement('div'); radial.id='elite-radial';
    radial.innerHTML = `
      <div class="elite-radial-item" id="r-settings"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg></div>
      <div class="elite-radial-item" id="r-tools"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg></div>
      <div class="elite-radial-item" id="r-profile"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg></div>`;
    document.body.appendChild(radial);
    document.getElementById('r-settings').addEventListener('click', ()=>{ radialOpen=false; document.querySelectorAll('.elite-radial-item').forEach(e=>e.classList.remove('open')); openDrawer(); });
    document.getElementById('r-tools').addEventListener('click', ()=>{ radialOpen=false; document.querySelectorAll('.elite-radial-item').forEach(e=>e.classList.remove('open')); quickTools(); });
    document.getElementById('r-profile').addEventListener('click', ()=>{ window.open('https://greasyfork.org/tr/users/1573407-mustafa-hakan','_blank'); radialOpen=false; document.querySelectorAll('.elite-radial-item').forEach(e=>e.classList.remove('open')); });

    let overlay = document.createElement('div'); overlay.id='elite-overlay'; overlay.addEventListener('click', ()=>{ drawerOpen=false; document.getElementById('elite-drawer').classList.remove('open'); overlay.classList.remove('open'); });
    document.body.appendChild(overlay);

    let drawer = document.createElement('div'); drawer.id='elite-drawer';
    drawer.innerHTML = `
      <div id="elite-drawer-head"><span>${_('drawer')}</span><span id="drawer-close" style="cursor:pointer"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg></span></div>
      <div id="elite-tabs">
        <div class="elite-tab active" data-tab="Look">${_('tab1')}</div>
        <div class="elite-tab" data-tab="Typo">${_('tab2')}</div>
        <div class="elite-tab" data-tab="Layout">${_('tab3')}</div>
        <div class="elite-tab" data-tab="Code">${_('tab4')}</div>
        <div class="elite-tab" data-tab="Tools">${_('tab5')}</div>
        <div class="elite-tab" data-tab="Keys">${_('tab6')}</div>
        <div class="elite-tab" data-tab="Meta">${_('tab7')}</div>
      </div>
      <div id="elite-content"></div>`;
    document.body.appendChild(drawer);
    document.getElementById('drawer-close').addEventListener('click', ()=>{ drawerOpen=false; drawer.classList.remove('open'); overlay.classList.remove('open'); });
    document.querySelectorAll('.elite-tab').forEach(tab=>{
      tab.addEventListener('click', ()=>{
        document.querySelectorAll('.elite-tab').forEach(t=>t.classList.remove('active'));
        tab.classList.add('active');
        switchTab(tab.dataset.tab);
      });
    });
    switchTab('Look');
  }

  function openDrawer(){ drawerOpen=true; document.getElementById('elite-drawer').classList.add('open'); document.getElementById('elite-overlay').classList.add('open'); }

  function btnToggle(id,label,key){
    return `<div class="elite-btn" id="${id}"><span>${label}</span><span class="elite-status ${S[key]?'on':'off'}">${S[key]?_('on'):_('off')}</span></div>`;
  }

  function updateToggle(id, key){
    let b = document.getElementById(id); if(!b) return;
    let s = b.querySelector('.elite-status');
    if(s){ s.textContent = S[key] ? _('on') : _('off'); s.className = 'elite-status '+(S[key]?'on':'off'); }
  }

  function switchTab(tab){
    let c = document.getElementById('elite-content');
    if (!c) return;
    if (tab==='Look'){
      c.innerHTML = btnToggle('cc-reading',_('reading'),'reading')+
        btnToggle('cc-compact',_('compact'),'compact')+
        btnToggle('cc-hover',_('hover'),'hover')+
        btnToggle('cc-grad',_('grad'),'grad')+
        btnToggle('cc-center',_('center'),'center')+
        btnToggle('cc-shadow',_('shadow'),'shadow')+
        btnToggle('cc-uline',_('uline'),'uline')+
        btnToggle('cc-larger',_('larger'),'larger')+
        `<label style="font-size:0.85rem">${_('font')}: <span id="fs-val">${S.fontSize}</span></label>
        <input type="range" id="fs-range" min="12" max="22" value="${parseInt(S.fontSize)}">`+
        `<label style="font-size:0.85rem">${_('width')}:</label>
        <select id="width-sel" style="width:100%"><option value="700px" ${S.width==='700px'?'selected':''}>Narrow</option><option value="900px" ${S.width==='900px'?'selected':''}>Normal</option><option value="1100px" ${S.width==='1100px'?'selected':''}>Wide</option><option value="100%" ${S.width==='100%'?'selected':''}>Full</option></select>`;
      document.getElementById('fs-range').addEventListener('input', function(){
        document.getElementById('fs-val').textContent = this.value+'px';
        S.fontSize = this.value+'px'; save(); applyAll();
      });
      document.getElementById('width-sel').addEventListener('change', function(){ S.width = this.value; save(); applyAll(); });
      ['reading','compact','hover','grad','center','shadow','uline','larger'].forEach(k=> bindToggle('cc-'+k, k));
    }
    else if (tab==='Typo'){
      c.innerHTML = btnToggle('cc-extLinks',_('extLinks'),'extLinks')+
        btnToggle('cc-monospace',_('monospace'),'monospace')+
        btnToggle('cc-justify',_('justify'),'justify')+
        `<label style="font-size:0.85rem">${_('lh')}: <span id="lh-val">${S.lh}</span></label>
        <input type="range" id="lh-range" min="1.2" max="2.2" step="0.1" value="${S.lh}">`+
        `<label style="font-size:0.85rem">${_('ls')}: <span id="ls-val">${S.ls}</span></label>
        <input type="range" id="ls-range" min="-1" max="3" step="0.1" value="${parseFloat(S.ls)}">`+
        `<label style="font-size:0.85rem">${_('ws')}: <span id="ws-val">${S.ws}</span></label>
        <input type="range" id="ws-range" min="0" max="6" step="0.1" value="${parseFloat(S.ws)}">`+
        `<label style="font-size:0.85rem">${_('fw')}: <span id="fw-val">${S.fw}</span></label>
        <input type="range" id="fw-range" min="300" max="700" step="100" value="${S.fw}">`;
      document.getElementById('lh-range').addEventListener('input', function(){ document.getElementById('lh-val').textContent=this.value; S.lh=this.value; save(); applyAll(); });
      document.getElementById('ls-range').addEventListener('input', function(){ document.getElementById('ls-val').textContent=this.value+'px'; S.ls=this.value+'px'; save(); applyAll(); });
      document.getElementById('ws-range').addEventListener('input', function(){ document.getElementById('ws-val').textContent=this.value+'px'; S.ws=this.value+'px'; save(); applyAll(); });
      document.getElementById('fw-range').addEventListener('input', function(){ document.getElementById('fw-val').textContent=this.value; S.fw=this.value; save(); applyAll(); });
      ['extLinks','monospace','justify'].forEach(k=> bindToggle('cc-'+k, k));
    }
    else if (tab==='Layout'){
      c.innerHTML = btnToggle('cc-sidebar',_('sidebar'),'sidebar')+
        btnToggle('cc-fullCode',_('fullCode'),'fullCode')+
        btnToggle('cc-darkImg',_('darkImg'),'darkImg')+
        btnToggle('cc-blur',_('blur'),'blur')+
        btnToggle('cc-outline',_('outline'),'outline')+
        btnToggle('cc-grayscale',_('grayscale'),'grayscale')+
        btnToggle('cc-sepia',_('sepia'),'sepia')+
        btnToggle('cc-night',_('night'),'night')+
        btnToggle('cc-removeCol',_('removeCol'),'removeCol');
      ['sidebar','fullCode','darkImg','blur','outline','grayscale','sepia','night','removeCol'].forEach(k=> bindToggle('cc-'+k, k));
    }
    else if (tab==='Code'){
      c.innerHTML = btnToggle('cc-copyBtn',_('copyBtn'),'copyBtn')+
        btnToggle('cc-srchHl',_('srchHl'),'srchHl')+
        btnToggle('cc-wrap',_('wrap'),'wrap')+
        btnToggle('cc-invert',_('invert'),'invert')+
        btnToggle('cc-fullCode',_('fullCode'),'fullCode')+
        `<div class="elite-btn" id="cc-codeSrch"><span>${_('codeSrch')}</span></div>`;
      document.getElementById('cc-codeSrch').addEventListener('click',()=>{
        let q=prompt('Search in code:'); if(!q) return;
        document.querySelectorAll('pre,code').forEach(el=>{
          el.innerHTML = el.innerHTML.replace(new RegExp('('+q.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')+')','gi'), '<span style="background:#4a7db8;color:#fff;border-radius:3px">$1</span>');
        });
      });
      ['copyBtn','srchHl','wrap','invert'].forEach(k=> bindToggle('cc-'+k, k));
    }
    else if (tab==='Tools'){
      c.innerHTML = btnToggle('cc-stats',_('stats'),'stats')+
        btnToggle('cc-installs',_('installs'),'installs')+
        btnToggle('cc-author',_('author'),'author')+
        btnToggle('cc-dates',_('dates'),'dates')+
        btnToggle('cc-hideInstall',_('hideInstall'),'hideInstall')+
        `<div class="elite-btn" id="cc-sortName"><span>${_('sortName')}</span></div>
        <div class="elite-btn" id="cc-sortDate"><span>${_('sortDate')}</span></div>
        <div class="elite-btn" id="cc-sortRating"><span>${_('sortRating')}</span></div>
        <div class="elite-btn" id="cc-sortInstalls"><span>${_('sortInstalls')}</span></div>
        <div class="elite-btn" id="cc-resetSort"><span>${_('resetSort')}</span></div>
        <div class="elite-btn" id="cc-copyLinks"><span>${_('copyLinks')}</span></div>
        <div class="elite-btn" id="cc-openAll"><span>${_('openAll')}</span></div>
        <div class="elite-btn" id="cc-copyInfo"><span>${_('copyInfo')}</span></div>`;
      ['stats','installs','author','dates','hideInstall'].forEach(k=> bindToggle('cc-'+k, k));
      document.getElementById('cc-sortName').addEventListener('click',()=>sort('name'));
      document.getElementById('cc-sortDate').addEventListener('click',()=>sort('date'));
      document.getElementById('cc-sortRating').addEventListener('click',()=>sort('rating'));
      document.getElementById('cc-sortInstalls').addEventListener('click',()=>sort('installs'));
      document.getElementById('cc-resetSort').addEventListener('click',()=>location.reload());
      document.getElementById('cc-copyLinks').addEventListener('click',()=>{
        let links=[]; document.querySelectorAll('.script-item a[href^="/"], .script-list-item a[href^="/"]').forEach(a=>{ if(a.href) links.push(a.href); });
        navigator.clipboard.writeText(links.join('\n'));
      });
      document.getElementById('cc-openAll').addEventListener('click',()=>{
        let links=document.querySelectorAll('.script-item a[href^="/"], .script-list-item a[href^="/"]');
        if(links.length>10 && !confirm('Open '+links.length+'?')) return;
        links.forEach((a,i)=>setTimeout(()=>window.open(a.href,'_blank'), i*300));
      });
      document.getElementById('cc-copyInfo').addEventListener('click',()=>{
        let info=[]; document.querySelectorAll('.script-item, .script-list-item').forEach(item=>{
          let t=item.querySelector('h2 a, .script-title a'); if(t) info.push(t.textContent.trim()+' - '+t.href);
        });
        navigator.clipboard.writeText(info.join('\n'));
      });
    }
    else if (tab==='Keys'){
      c.innerHTML = `<div class="elite-btn" id="cc-top"><span>${_('topPage')}</span></div>
        <div class="elite-btn" id="cc-middle"><span>${_('middle')}</span></div>
        <div class="elite-btn" id="cc-bottom"><span>${_('bottom')}</span></div>
        <div class="elite-btn" id="cc-autoScroll"><span>${_('autoScroll')}</span></div>
        <div class="elite-btn" id="cc-stopScroll"><span>${_('stopScroll')}</span></div>
        <div class="elite-btn" id="cc-quickUp"><span>${_('quickUp')}</span></div>
        <div class="elite-btn" id="cc-quickDown"><span>${_('quickDown')}</span></div>
        <div class="elite-btn" id="cc-focusSearch"><span>${_('focusSearch')}</span></div>
        <div class="elite-btn" id="cc-copyTitle"><span>${_('copyTitle')}</span></div>
        <div class="elite-btn" id="cc-copyHeadings"><span>${_('copyHeadings')}</span></div>
        <div class="elite-btn" id="cc-charCount"><span>${_('charCount')}</span></div>
        <div class="elite-btn" id="cc-wordCount"><span>${_('wordCount')}</span></div>
        <div class="elite-btn" id="cc-readTime"><span>${_('readTime')}</span></div>`;
      document.getElementById('cc-top').addEventListener('click',()=>window.scrollTo({top:0,behavior:'smooth'}));
      document.getElementById('cc-middle').addEventListener('click',()=>window.scrollTo({top:document.body.scrollHeight/2,behavior:'smooth'}));
      document.getElementById('cc-bottom').addEventListener('click',()=>window.scrollTo({top:document.body.scrollHeight,behavior:'smooth'}));
      document.getElementById('cc-autoScroll').addEventListener('click',()=>{ if(autoScrollId) clearInterval(autoScrollId); autoScrollId=setInterval(()=>window.scrollBy(0,2),50); });
      document.getElementById('cc-stopScroll').addEventListener('click',()=>{ if(autoScrollId){ clearInterval(autoScrollId); autoScrollId=null; } });
      document.getElementById('cc-quickUp').addEventListener('click',()=>window.scrollBy(0,-500));
      document.getElementById('cc-quickDown').addEventListener('click',()=>window.scrollBy(0,500));
      document.getElementById('cc-focusSearch').addEventListener('click',()=>{ let s=document.querySelector('input[type="search"], input[name="q"]'); if(s) s.focus(); });
      document.getElementById('cc-copyTitle').addEventListener('click',()=>navigator.clipboard.writeText(document.title));
      document.getElementById('cc-copyHeadings').addEventListener('click',()=>{
        let h=[]; document.querySelectorAll('h1,h2,h3,h4').forEach(e=>h.push(e.textContent.trim())); navigator.clipboard.writeText(h.join('\n'));
      });
      document.getElementById('cc-charCount').addEventListener('click',()=>{ S.charCount=!S.charCount; save(); updateStats(); });
      document.getElementById('cc-wordCount').addEventListener('click',()=>{ S.wordCount=!S.wordCount; save(); updateStats(); });
      document.getElementById('cc-readTime').addEventListener('click',()=>{ S.readTime=!S.readTime; save(); updateStats(); });
    }
    else if (tab==='Meta'){
      c.innerHTML = `
        <div class="elite-section">${_('theme')}</div>
        <div class="elite-btn" id="cc-themeDark">${_('dark')}</div>
        <div class="elite-btn" id="cc-themeLight">${_('light')}</div>
        <div class="elite-btn" id="cc-autoTheme">${_('autoTheme')} <span class="elite-status ${S.autoTheme?'on':'off'}">${S.autoTheme?_('on'):_('off')}</span></div>
        <div class="elite-btn" id="cc-blueTheme">Blue Theme <span class="elite-status ${S.blueTheme?'on':'off'}">${S.blueTheme?_('on'):_('off')}</span></div>
        <div class="elite-btn" id="cc-purpleTheme">Purple Theme <span class="elite-status ${S.purpleTheme?'on':'off'}">${S.purpleTheme?_('on'):_('off')}</span></div>
        <div class="elite-btn" id="cc-orangeTheme">Orange Theme <span class="elite-status ${S.orangeTheme?'on':'off'}">${S.orangeTheme?_('on'):_('off')}</span></div>
        <div class="elite-section">${_('sched')}</div>
        <label>${_('dark')}: <input type="time" id="sched-dark" value="${S.schedDark||''}" style="width:100%"></label>
        <label>${_('light')}: <input type="time" id="sched-light" value="${S.schedLight||''}" style="width:100%"></label>
        <div class="elite-btn" id="cc-schedSave">${_('set')}</div>
        <div class="elite-btn" id="cc-schedClear">Clear</div>
        <div class="elite-section">System</div>
        <div class="elite-btn" id="cc-export">${_('export')}</div>
        <div class="elite-btn" id="cc-import">${_('import')}</div>
        <div class="elite-btn" id="cc-zen">${_('zen')} <span class="elite-status ${S.zen?'on':'off'}">${S.zen?_('on'):_('off')}</span></div>
        <div class="elite-btn" id="cc-lang">${_('lang')}: ${L.toUpperCase()}</div>
        <div class="elite-btn" id="cc-resetAll">${_('resetAll')}</div>`;
      document.getElementById('cc-themeDark').addEventListener('click',()=>{ S.theme='dark'; save(); applyAll(); });
      document.getElementById('cc-themeLight').addEventListener('click',()=>{ S.theme='light'; save(); applyAll(); });
      bindToggle('cc-autoTheme','autoTheme');
      bindToggle('cc-blueTheme','blueTheme');
      bindToggle('cc-purpleTheme','purpleTheme');
      bindToggle('cc-orangeTheme','orangeTheme');
      document.getElementById('cc-schedSave').addEventListener('click',()=>{
        S.schedDark=document.getElementById('sched-dark').value; S.schedLight=document.getElementById('sched-light').value; save();
      });
      document.getElementById('cc-schedClear').addEventListener('click',()=>{ S.schedDark=''; S.schedLight=''; save(); });
      document.getElementById('cc-export').addEventListener('click',()=>{ navigator.clipboard.writeText(JSON.stringify(S,null,2)); alert('Copied'); });
      document.getElementById('cc-import').addEventListener('click',()=>{
        let j=prompt('Paste JSON:'); if(!j) return;
        try{ let d=JSON.parse(j); for(let k in d) if(DEF.hasOwnProperty(k)){ S[k]=d[k]; GM_setValue(k,d[k]); } applyAll(); }catch(e){ alert('Invalid'); }
      });
      bindToggle('cc-zen','zen');
      document.getElementById('cc-lang').addEventListener('click',()=>{ L = L==='en'?'tr':'en'; GM_setValue('lang',L); applyAll(); location.reload(); });
      document.getElementById('cc-resetAll').addEventListener('click',()=>{ if(confirm('Reset?')){ for(let k in DEF){ S[k]=DEF[k]; GM_setValue(k,DEF[k]); } applyAll(); } });
    }
  }

  function bindToggle(id, key){
    let el = document.getElementById(id); if(!el) return;
    el.addEventListener('click', ()=>{ S[key]=!S[key]; save(); applyAll(); updateToggle(id, key); });
  }

  function sort(type){
    let container = document.querySelector('.script-list, .scripts-container, #content');
    if(!container) return;
    let items = Array.from(container.querySelectorAll('.script-item, .script-list-item'));
    if(items.length<2) return;
    items.sort((a,b)=>{
      let get = el=>{
        if(type==='name'){ let t=el.querySelector('h2 a, .script-title a'); return t?t.textContent.trim().toLowerCase():''; }
        if(type==='date'){ let d=el.querySelector('time, .script-date'); return d?new Date(d.getAttribute('datetime')||d.textContent).getTime():0; }
        if(type==='rating'){ let r=el.querySelector('.rating, .script-rating'); return r?-parseFloat(r.textContent.replace(/[^0-9.]/g,''))||0:0; }
        if(type==='installs'){ let i=el.querySelector('.downloads, .total-installs'); return i?-parseInt(i.textContent.replace(/[^0-9]/g,''))||0:0; }
        return 0;
      };
      return get(a)-get(b);
    });
    items.forEach(item=>container.appendChild(item));
  }

  function quickTools(){
    let m=document.createElement('div'); m.style.cssText='position:fixed;bottom:140px;right:24px;background:var(--p-bgL);border:2px solid var(--p-gold);border-radius:16px;padding:8px;z-index:1200;box-shadow:var(--p-shadow);max-height:300px;overflow-y:auto';
    m.innerHTML = `<div class="elite-btn" id="qt-top">${_('top')}</div><div class="elite-btn" id="qt-copyTitle">${_('copyTitle')}</div><div class="elite-btn" id="qt-codeSrch">${_('codeSrch')}</div>`;
    document.body.appendChild(m);
    document.getElementById('qt-top').addEventListener('click',()=>{ window.scrollTo({top:0,behavior:'smooth'}); m.remove(); });
    document.getElementById('qt-copyTitle').addEventListener('click',()=>{ navigator.clipboard.writeText(document.title); m.remove(); });
    document.getElementById('qt-codeSrch').addEventListener('click',()=>{
      let q=prompt('Search code:'); if(!q) return;
      document.querySelectorAll('pre,code').forEach(el=>{
        el.innerHTML=el.innerHTML.replace(new RegExp('('+q.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')+')','gi'),'<span style="background:#4a7db8;color:#fff;border-radius:3px">$1</span>');
      });
      m.remove();
    });
    setTimeout(()=>{ if(m.parentNode) m.remove(); },5000);
  }

  function updateStats(){
    let ex = document.getElementById('elite-stats');
    if(ex) ex.remove();
    if(!S.charCount && !S.wordCount && !S.readTime) return;
    let txt = document.body.innerText||'';
    let parts = [];
    if(S.charCount) parts.push('Chars: '+txt.length);
    if(S.wordCount) parts.push('Words: '+txt.split(/\s+/).length);
    if(S.readTime) parts.push('Read: ~'+Math.ceil(txt.split(/\s+/).length/200)+' min');
    let d=document.createElement('div'); d.id='elite-stats'; d.innerHTML=parts.join(' | ');
    document.body.appendChild(d);
  }

  function applyAll(){
    applyVars();
    fullCSS();
    document.documentElement.classList.toggle('reading-mode', S.reading);
    document.documentElement.classList.toggle('compact-mode', S.compact);
    document.documentElement.classList.toggle('high-contrast', S.contrast);
    document.documentElement.classList.toggle('zen-mode', S.zen);
    document.querySelectorAll('pre').forEach(pre=>{ pre.style.whiteSpace = S.wrap?'pre-wrap':'pre'; });
    addCopyButtons();
    highlightSearch();
    updateStats();
    if(S.extLinks) extLinks(true); else extLinks(false);
    if(S.installs) installsBadge(true); else installsBadge(false);
    if(S.author) authorBadge(true); else authorBadge(false);
    if(S.dates) dateBadge(true); else dateBadge(false);
  }

  function addCopyButtons(){
    if(!S.copyBtn) return;
    document.querySelectorAll('pre').forEach(pre=>{
      if(pre.querySelector('.elite-copy')) return;
      let btn=document.createElement('button'); btn.textContent='Copy'; btn.className='elite-copy';
      btn.style.cssText='position:absolute;top:8px;right:8px;padding:4px 10px;font-size:0.8rem;z-index:5;opacity:0.7';
      btn.addEventListener('click',()=>{ navigator.clipboard.writeText(pre.textContent).then(()=>{ btn.textContent='Copied!'; setTimeout(()=>btn.textContent='Copy',1500); }); });
      pre.style.position='relative'; pre.appendChild(btn);
    });
  }

  function highlightSearch(){
    if(!S.srchHl) return;
    let p=new URLSearchParams(window.location.search), q=p.get('q'); if(!q) return;
    let terms=q.split(/\s+/).filter(Boolean);
    document.querySelectorAll('.content, .main-content, #content, main, article').forEach(container=>{
      let walker=document.createTreeWalker(container, NodeFilter.SHOW_TEXT, null, false), nodes=[];
      while(walker.nextNode()) nodes.push(walker.currentNode);
      nodes.forEach(node=>{
        let html=node.textContent, changed=false;
        terms.forEach(term=>{
          let r=new RegExp('('+term.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')+')','gi');
          if(r.test(html)){ html=html.replace(r,'<span style="background:#4a7db8;color:#fff;border-radius:3px">$1</span>'); changed=true; }
        });
        if(changed){ let s=document.createElement('span'); s.innerHTML=html; node.parentNode.replaceChild(s,node); }
      });
    });
  }

  function extLinks(enable){
    let id='elite-ext-style', el=document.getElementById(id);
    if(enable){
      if(!el){ el=document.createElement('style'); el.id=id; el.textContent='a[href^="http"]:not([href*="greasyfork.org"]){background:#4a7db8!important;color:#fff!important;padding:0 4px;border-radius:3px}'; document.head.appendChild(el); }
    }else{ if(el) el.remove(); }
  }

  function installsBadge(enable){
    document.querySelectorAll('.script-item, .script-list-item').forEach(item=>{
      let b=item.querySelector('.elite-install');
      if(enable){
        if(!b){ let d=item.querySelector('.downloads, .total-installs'); if(d){ b=document.createElement('span'); b.className='elite-install'; b.style.cssText='background:var(--p-acc);color:#fff;padding:2px 8px;border-radius:20px;font-size:0.75rem;margin-left:8px'; b.textContent=d.textContent.replace(/[^0-9]/g,'')+' installs'; let meta=item.querySelector('.script-info, .script-meta'); if(meta) meta.appendChild(b); } }
      }else{ if(b) b.remove(); }
    });
  }

  function authorBadge(enable){
    document.querySelectorAll('.script-item, .script-list-item').forEach(item=>{
      let b=item.querySelector('.elite-author');
      if(enable){
        if(!b){ let a=item.querySelector('.author a, .script-author a'); if(a){ b=document.createElement('span'); b.className='elite-author'; b.style.cssText='background:var(--p-accS);color:#fff;padding:2px 8px;border-radius:20px;font-size:0.75rem;margin-left:8px'; b.textContent=a.textContent.trim(); let meta=item.querySelector('.script-info, .script-meta'); if(meta) meta.appendChild(b); } }
      }else{ if(b) b.remove(); }
    });
  }

  function dateBadge(enable){
    document.querySelectorAll('.script-item, .script-list-item').forEach(item=>{
      let b=item.querySelector('.elite-date');
      if(enable){
        if(!b){ let t=item.querySelector('time, .script-date'); if(t){ b=document.createElement('span'); b.className='elite-date'; b.style.cssText='background:var(--p-acc);color:#fff;padding:2px 8px;border-radius:20px;font-size:0.75rem;margin-left:8px'; b.textContent=t.textContent.trim(); let meta=item.querySelector('.script-info, .script-meta'); if(meta) meta.appendChild(b); } }
      }else{ if(b) b.remove(); }
    });
  }

  function checkSchedule(){
    if(!S.schedDark && !S.schedLight) return;
    let now=new Date(), cur=now.getHours()*60+now.getMinutes();
    if(S.schedDark){
      let p=S.schedDark.split(':'), dh=+p[0], dm=+p[1];
      if(!isNaN(dh) && !isNaN(dm) && Math.abs(cur-(dh*60+dm))<=2 && S.theme!=='dark'){ S.theme='dark'; save(); applyAll(); }
    }
    if(S.schedLight){
      let p=S.schedLight.split(':'), lh=+p[0], lm=+p[1];
      if(!isNaN(lh) && !isNaN(lm) && Math.abs(cur-(lh*60+lm))<=2 && S.theme!=='light'){ S.theme='light'; save(); applyAll(); }
    }
  }
  setInterval(checkSchedule, 60000);

  function createStatsBar(){
    let bar=document.createElement('div'); bar.id='elite-bar';
    bar.style.cssText='position:fixed;bottom:0;left:0;right:0;background:var(--p-bgD);border-top:1px solid var(--p-border);padding:6px 16px;display:flex;justify-content:space-around;font-size:0.8rem;color:var(--p-muted);z-index:999';
    bar.innerHTML=`<span>${_('scripts')}: <b>${document.querySelectorAll('.script-item, .script-list-item').length}</b></span><span>${document.title.slice(0,30)}</span><span>${_('theme')}: ${S.theme}</span>`;
    document.body.appendChild(bar);
    setInterval(()=>{ let b=bar.querySelector('b'); if(b) b.textContent=document.querySelectorAll('.script-item, .script-list-item').length; },3000);
  }

  function init(){
    applyAll();
    createUI();
    createStatsBar();
    if(typeof GM_registerMenuCommand==='function'){
      GM_registerMenuCommand('Toggle Panel', ()=>{ radialOpen? (radialOpen=false, document.querySelectorAll('.elite-radial-item').forEach(e=>e.classList.remove('open'))) : (radialOpen=true, document.querySelectorAll('.elite-radial-item').forEach(e=>e.classList.add('open'))); });
      GM_registerMenuCommand('Toggle Dark/Light', ()=>{ S.theme=S.theme==='dark'?'light':'dark'; save(); applyAll(); });
      GM_registerMenuCommand(_('top'), ()=>window.scrollTo({top:0,behavior:'smooth'}));
    }
    new MutationObserver(()=>{
      addCopyButtons(); highlightSearch(); updateStats();
      if(S.extLinks) extLinks(true); if(S.installs) installsBadge(true); if(S.author) authorBadge(true); if(S.dates) dateBadge(true);
    }).observe(document.body, {childList:true, subtree:true});

    document.addEventListener('keydown', e=>{
      if(e.ctrlKey && e.shiftKey && e.key==='P'){ e.preventDefault(); radialOpen=!radialOpen; document.querySelectorAll('.elite-radial-item').forEach(el=>el.classList.toggle('open',radialOpen)); }
      if(e.ctrlKey && e.key==='k'){ e.preventDefault(); openDrawer(); }
      if(e.key==='Escape'){ radialOpen=false; document.querySelectorAll('.elite-radial-item').forEach(el=>el.classList.remove('open')); drawerOpen=false; document.getElementById('elite-drawer').classList.remove('open'); document.getElementById('elite-overlay').classList.remove('open'); if(autoScrollId){ clearInterval(autoScrollId); autoScrollId=null; } }
    });
  }

  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded', init);
  else init();
})();