/* ================= پنل مدیریت — ویرایش همه‌ی بخش‌ها ================= */
(function () {
  'use strict';
  var Store = window.Store;
  var D = Store.load();
  var PW_KEY = 'shahedSummer.pw';
  var AUTH_KEY = 'shahedSummer.auth';

  /* ---------- ساخت فایل content.js برای انتشار روی هاست ---------- */
  function dlFile(text, name, mime){
    var blob = new Blob([text], {type: mime});
    var url = URL.createObjectURL(blob);
    var a = document.createElement('a');
    a.href = url; a.download = name;
    document.body.appendChild(a); a.click();
    setTimeout(function(){ try{document.body.removeChild(a);}catch(e){} URL.revokeObjectURL(url); }, 400);
  }
  function downloadContentJs(){
    try{
      /* نسخه‌ی جدید انتشار: هم در content.js و هم در version.json ثبت می‌شود.
         لودر صفحه، version.json را همیشه بدون کش می‌خواند؛ پس با جایگزینی این دو فایل،
         کش قدیمی مرورگر همه‌ی کاربران دور زده می‌شود و با یک رفرش آپدیت می‌گیرند */
      var stamp = 'pub-' + Date.now();
      var data = Store.load();
      data.contentVersion = stamp;
      var header = '/* محتوای منتشرشده‌ی سایت ترم تابستان — این فایل را در assets/js/content.js هاست جایگزین کنید */\n';
      dlFile(header + 'window.SITE_DATA = ' + JSON.stringify(data, null, 2) + ';\n', 'content.js', 'application/javascript;charset=utf-8');
      setTimeout(function(){ dlFile(JSON.stringify({build: stamp}) + '\n', 'version.json', 'application/json;charset=utf-8'); }, 500);
      flash('✅ فایل‌های content.js و version.json ساخته شد');
    }catch(e){ alert('خطا در ساخت فایل: '+e.message); }
  }

  function esc(s){ return String(s==null?'':s).replace(/[&<>"']/g,function(c){return({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'})[c];}); }
  function el(id){ return document.getElementById(id); }
  function getPw(){ try{ return localStorage.getItem(PW_KEY) || 'shahed1405'; }catch(e){ return 'shahed1405'; } }

  /* ---------- ذخیره ---------- */
  function persist(){ Store.save(D); flash(); }
  var flashT;
  function flash(msg){ var f=el('saveFlash'); if(msg) f.textContent=msg; f.classList.add('show'); clearTimeout(flashT); flashT=setTimeout(function(){f.classList.remove('show'); f.textContent='✅ ذخیره شد';},1600); }

  /* ---------- ورود ---------- */
  function isAuthed(){ try{ return sessionStorage.getItem(AUTH_KEY)==='1'; }catch(e){ return false; } }
  function showApp(){ el('loginWrap').style.display='none'; el('adminApp').style.display='block'; renderPanel(currentTab); }
  el('loginBtn').addEventListener('click', doLogin);
  el('pwInput').addEventListener('keydown', function(e){ if(e.key==='Enter') doLogin(); });
  function doLogin(){
    if(el('pwInput').value===getPw()){ try{sessionStorage.setItem(AUTH_KEY,'1');}catch(e){} el('loginErr').style.display='none'; showApp(); }
    else { el('loginErr').style.display='block'; }
  }
  el('logoutBtn').addEventListener('click', function(){ try{sessionStorage.removeItem(AUTH_KEY);}catch(e){} location.reload(); });

  /* ---------- تب‌ها ---------- */
  var currentTab='general';
  el('adminTabs').addEventListener('click', function(e){
    var b=e.target.closest('button[data-p]'); if(!b) return;
    currentTab=b.getAttribute('data-p');
    [].forEach.call(el('adminTabs').children,function(x){x.classList.toggle('active',x===b);});
    renderPanel(currentTab);
  });

  /* ---------- ابزارهای فرم ---------- */
  function field(label, value, oninput, isArea){
    var wrap=document.createElement('div'); wrap.className='a-field';
    var lb=document.createElement('label'); lb.textContent=label; wrap.appendChild(lb);
    var inp=document.createElement(isArea?'textarea':'input');
    inp.className=isArea?'a-textarea':'a-input'; inp.value=value==null?'':value;
    if(isArea==='tall') inp.className='a-textarea tall';
    inp.addEventListener('input',function(){ oninput(inp.value); });
    wrap.appendChild(inp); return wrap;
  }
  function btn(txt,cls,fn){ var b=document.createElement('button'); b.className='a-btn '+(cls||''); b.textContent=txt; b.addEventListener('click',fn); return b; }
  function card(title, sub){ var c=document.createElement('div'); c.className='a-card'; if(title){var h=document.createElement('h3'); h.textContent=title; c.appendChild(h);} if(sub){var s=document.createElement('div'); s.className='a-sub'; s.textContent=sub; c.appendChild(s);} return c; }

  /* ---------- رندر پنل‌ها ---------- */
  function renderPanel(p){
    var host=el('panels'); host.innerHTML='';
    var div=document.createElement('div'); div.className='admin-panel active'; host.appendChild(div);
    ({general:pGeneral, calendar:pCalendar, announcements:pAnnouncements, rules:pRules, guides:pGuides, guest:pGuest, courses:pCourses, schedule:pSchedule, fees:pFees, links:pLinks, settings:pSettings}[p]||pGeneral)(div);
  }

  /* ===== عمومی ===== */
  function pGeneral(root){
    var c=card('اطلاعات عمومی سایت','عنوان، زیرعنوان و متن هیرو');
    c.appendChild(field('عنوان سایت', D.site.title, function(v){D.site.title=v;}));
    c.appendChild(field('زیرعنوان', D.site.subtitle, function(v){D.site.subtitle=v;}));
    c.appendChild(field('عنوان هیرو', D.site.heroTitle, function(v){D.site.heroTitle=v;}));
    c.appendChild(field('متن هیرو', D.site.heroSub, function(v){D.site.heroSub=v;}, true));
    c.appendChild(field('کد ترم', D.site.termCode, function(v){D.site.termCode=v;}));
    c.appendChild(btn('💾 ذخیره','primary',persist));
    root.appendChild(c);
  }

  /* ===== تقویم ===== */
  function pCalendar(root){
    var c=card('زمان‌شمار','تاریخ شروع و پایان کلاس‌ها (میلادی — مبنای شمارش معکوس و تولید برنامه هفتگی)');
    c.appendChild(field('متن برچسب زمان‌شمار', D.countdown.label, function(v){D.countdown.label=v;}));
    var r=document.createElement('div'); r.className='a-row';
    r.appendChild(field('شروع کلاس‌ها (YYYY-MM-DDTHH:MM:SS)', D.countdown.classStart, function(v){D.countdown.classStart=v;}));
    r.appendChild(field('پایان کلاس‌ها', D.countdown.classEnd, function(v){D.countdown.classEnd=v;}));
    c.appendChild(r);
    c.appendChild(btn('💾 ذخیره','primary',persist));
    root.appendChild(c);

    var c2=card('رویدادهای تقویم آموزشی','تاریخ شمسی نمایشی + تاریخ میلادی برای وضعیت (انجام‌شده/درجریان)');
    (D.calendar||[]).forEach(function(ev,i){
      var it=document.createElement('div'); it.className='a-item';
      var hd=document.createElement('div'); hd.className='a-item-head';
      hd.innerHTML='<span class="a-item-title">'+esc(ev.icon+' '+ev.title)+'</span>';
      var act=document.createElement('div'); act.className='a-item-actions';
      act.appendChild(btn('🗑 حذف','danger sm',function(){D.calendar.splice(i,1);persist();pCalendar(clear(root));}));
      hd.appendChild(act); it.appendChild(hd);
      var r1=document.createElement('div'); r1.className='a-row';
      r1.appendChild(field('آیکون', ev.icon, function(v){ev.icon=v;}));
      r1.appendChild(field('عنوان', ev.title, function(v){ev.title=v;}));
      it.appendChild(r1);
      it.appendChild(field('تاریخ شمسی (نمایشی)', ev.jalali, function(v){ev.jalali=v;}));
      var r2=document.createElement('div'); r2.className='a-row';
      r2.appendChild(field('شروع میلادی (YYYY-MM-DD)', ev.gStart, function(v){ev.gStart=v;}));
      r2.appendChild(field('پایان میلادی (YYYY-MM-DD)', ev.gEnd, function(v){ev.gEnd=v;}));
      it.appendChild(r2);
      var r3=document.createElement('div'); r3.className='a-row';
      r3.appendChild(field('ساعت شروع (HH:MM — مبنای زمان‌شمار)', ev.startTime, function(v){ev.startTime=v.trim();}));
      r3.appendChild(field('ساعت پایان (HH:MM — اختیاری)', ev.endTime, function(v){ev.endTime=v.trim();}));
      it.appendChild(r3);
      c2.appendChild(it);
    });
    var bar=document.createElement('div'); bar.className='a-actions-bar';
    bar.appendChild(btn('➕ افزودن رویداد','',function(){D.calendar.push({id:'ev'+Date.now(),icon:'📅',title:'رویداد جدید',jalali:'',gStart:'2026-01-01',startTime:'08:00',gEnd:'2026-01-01',endTime:''});persist();pCalendar(clear(root));}));
    bar.appendChild(btn('💾 ذخیره','primary',persist));
    c2.appendChild(bar);
    c2.appendChild(field('متن یادداشت تقویم', D.calendarNote, function(v){D.calendarNote=v;}, true));
    root.appendChild(c2);
  }

  /* ===== اطلاعیه‌ها ===== */
  function pAnnouncements(root){
    var c=card('اطلاعیه‌ها','اطلاعیه اصلی، تکمیلی یا هر اطلاعیه‌ی جدید');
    (D.announcements||[]).forEach(function(a,i){
      var it=document.createElement('div'); it.className='a-item';
      var hd=document.createElement('div'); hd.className='a-item-head';
      hd.innerHTML='<span class="a-item-title">'+esc(a.title)+'</span>';
      var act=document.createElement('div'); act.className='a-item-actions';
      act.appendChild(btn('🗑 حذف','danger sm',function(){D.announcements.splice(i,1);persist();pAnnouncements(clear(root));}));
      hd.appendChild(act); it.appendChild(hd);
      var r1=document.createElement('div'); r1.className='a-row three';
      r1.appendChild(field('آیکون', a.icon, function(v){a.icon=v;}));
      r1.appendChild(field('برچسب', a.badge, function(v){a.badge=v;}));
      r1.appendChild(field('منبع (کانال)', a.source, function(v){a.source=v;}));
      it.appendChild(r1);
      it.appendChild(field('عنوان', a.title, function(v){a.title=v;}));
      it.appendChild(field('خلاصه', a.summary, function(v){a.summary=v;}));
      it.appendChild(field('متن کامل', a.body, function(v){a.body=v;}, 'tall'));
      var r2=document.createElement('div'); r2.className='a-row';
      r2.appendChild(field('لینک (اختیاری)', a.link, function(v){a.link=v;}));
      r2.appendChild(field('متن دکمه‌ی لینک', a.linkText, function(v){a.linkText=v;}));
      it.appendChild(r2);
      var r3=document.createElement('div'); r3.className='a-row';
      r3.appendChild(field('مسیر فایل PDF (اختیاری)', a.file, function(v){a.file=v;}));
      r3.appendChild(field('متن دکمه‌ی فایل', a.fileText, function(v){a.fileText=v;}));
      it.appendChild(r3);
      c.appendChild(it);
    });
    var bar=document.createElement('div'); bar.className='a-actions-bar';
    bar.appendChild(btn('➕ افزودن اطلاعیه','',function(){D.announcements.push({id:'an'+Date.now(),icon:'📢',badge:'اطلاعیه',title:'اطلاعیه جدید',summary:'',body:'',link:'',linkText:'مشاهده',source:''});persist();pAnnouncements(clear(root));}));
    bar.appendChild(btn('💾 ذخیره','primary',persist));
    c.appendChild(bar);
    root.appendChild(c);
  }

  /* ===== نکات مهم ===== */
  function pRules(root){
    if(!D.importantRules) D.importantRules={title:'نکات مهم و قوانین ترم تابستان',summary:'',items:[]};
    var r=D.importantRules;
    var c=card('نکات مهم و قوانین ترم تابستان','عنوان، توضیح کوتاه و فهرست نکات (هر خط یک نکته)');
    c.appendChild(field('عنوان', r.title, function(v){r.title=v;}));
    c.appendChild(field('توضیح کوتاه', r.summary, function(v){r.summary=v;}));
    c.appendChild(field('نکات (هر خط یک نکته)', (r.items||[]).join('\n'), function(v){r.items=v.split('\n').filter(function(x){return x.trim();});}, 'tall'));
    c.appendChild(btn('💾 ذخیره','primary',persist));
    root.appendChild(c);
  }

  /* ===== راهنماها ===== */
  function pGuides(root){
    var c=card('راهنماهای ثبت‌نام','مراحل هر راهنما را خط به خط وارد کنید (هر خط = یک گام)');
    (D.guides||[]).forEach(function(g,i){
      var it=document.createElement('div'); it.className='a-item';
      var hd=document.createElement('div'); hd.className='a-item-head';
      hd.innerHTML='<span class="a-item-title">'+esc(g.title)+'</span>';
      var act=document.createElement('div'); act.className='a-item-actions';
      act.appendChild(btn('🗑 حذف','danger sm',function(){D.guides.splice(i,1);persist();pGuides(clear(root));}));
      hd.appendChild(act); it.appendChild(hd);
      var r1=document.createElement('div'); r1.className='a-row';
      r1.appendChild(field('آیکون', g.icon, function(v){g.icon=v;}));
      r1.appendChild(field('عنوان', g.title, function(v){g.title=v;}));
      it.appendChild(r1);
      it.appendChild(field('خلاصه', g.summary, function(v){g.summary=v;}));
      it.appendChild(field('مراحل (هر خط یک گام)', (g.steps||[]).join('\n'), function(v){g.steps=v.split('\n').filter(function(x){return x.trim();});}, 'tall'));
      var r2=document.createElement('div'); r2.className='a-row';
      r2.appendChild(field('لینک', g.link, function(v){g.link=v;}));
      r2.appendChild(field('متن دکمه', g.linkText, function(v){g.linkText=v;}));
      it.appendChild(r2);
      var r3=document.createElement('div'); r3.className='a-row';
      r3.appendChild(field('مسیر فایل PDF (اختیاری)', g.file, function(v){g.file=v;}));
      r3.appendChild(field('متن دکمه‌ی فایل', g.fileText, function(v){g.fileText=v;}));
      it.appendChild(r3);
      c.appendChild(it);
    });
    var bar=document.createElement('div'); bar.className='a-actions-bar';
    bar.appendChild(btn('➕ افزودن راهنما','',function(){D.guides.push({id:'g'+Date.now(),icon:'⚜️',title:'راهنمای جدید',summary:'',steps:[],link:'',linkText:'ورود'});persist();pGuides(clear(root));}));
    bar.appendChild(btn('💾 ذخیره','primary',persist));
    c.appendChild(bar);
    root.appendChild(c);
  }

  /* ===== مهمان شدن ===== */
  function pGuest(root){
    var g=D.guest;
    var c=card('راهنمای مهمان شدن','همه‌ی لیست‌ها خط به خط وارد می‌شوند');
    c.appendChild(field('آیکون', g.icon, function(v){g.icon=v;}));
    c.appendChild(field('عنوان', g.title, function(v){g.title=v;}));
    c.appendChild(field('مقدمه', g.intro, function(v){g.intro=v;}, true));
    c.appendChild(field('۱) قوانین و شرایط (هر خط یک مورد)', (g.rules||[]).join('\n'), function(v){g.rules=v.split('\n').filter(function(x){return x.trim();});}, 'tall'));
    c.appendChild(field('نکته‌ی دروس زبان', g.langNote, function(v){g.langNote=v;}, true));
    c.appendChild(field('۲) مراحل ثبت درخواست (هر خط)', (g.requestSteps||[]).join('\n'), function(v){g.requestSteps=v.split('\n').filter(function(x){return x.trim();});}, 'tall'));
    c.appendChild(field('مسیر تأیید (هر خط یک مرحله)', (g.approval||[]).join('\n'), function(v){g.approval=v.split('\n').filter(function(x){return x.trim();});}, true));
    c.appendChild(field('گام نهایی', g.finalStep, function(v){g.finalStep=v;}, true));
    c.appendChild(field('۳) نکات مهم (هر خط)', (g.important||[]).join('\n'), function(v){g.important=v.split('\n').filter(function(x){return x.trim();});}, 'tall'));
    c.appendChild(field('۴) دانشگاه‌های دارای ترم تابستان (هر خط)', (g.universities||[]).join('\n'), function(v){g.universities=v.split('\n').filter(function(x){return x.trim();});}, 'tall'));
    c.appendChild(field('منبع', g.source, function(v){g.source=v;}));
    c.appendChild(btn('💾 ذخیره','primary',persist));
    root.appendChild(c);
  }

  /* ===== دروس ===== */
  function pCourses(root){
    var c=card('دروس ارائه‌شده','دسته‌ها و دروس هر دسته. هر درس: «نام | واحد»');
    (D.courses||[]).forEach(function(cat,i){
      var it=document.createElement('div'); it.className='a-item';
      var hd=document.createElement('div'); hd.className='a-item-head';
      hd.innerHTML='<span class="a-item-title">📖 '+esc(cat.name)+'</span>';
      var act=document.createElement('div'); act.className='a-item-actions';
      act.appendChild(btn('🗑 حذف دسته','danger sm',function(){D.courses.splice(i,1);persist();pCourses(clear(root));}));
      hd.appendChild(act); it.appendChild(hd);
      it.appendChild(field('نام دسته', cat.name, function(v){cat.name=v;}));
      var txt=(cat.items||[]).map(function(x){return x.name+' | '+x.units;}).join('\n');
      it.appendChild(field('دروس (هر خط: نام | واحد)', txt, function(v){
        cat.items=v.split('\n').filter(function(x){return x.trim();}).map(function(line){var parts=line.split('|');return {name:(parts[0]||'').trim(),units:(parts[1]||'').trim()};});
      }, 'tall'));
      c.appendChild(it);
    });
    var bar=document.createElement('div'); bar.className='a-actions-bar';
    bar.appendChild(btn('➕ افزودن دسته','',function(){D.courses.push({id:'c'+Date.now(),name:'دسته‌ی جدید',items:[]});persist();pCourses(clear(root));}));
    bar.appendChild(btn('💾 ذخیره','primary',persist));
    c.appendChild(bar);
    root.appendChild(c);
  }

  /* ===== برنامه هفتگی ===== */
  function pSchedule(root){
    var c=card('برنامه هفتگی','برای هر روز و بازه‌ی زمانی، دروس را خط به خط بنویسید (هر خط یک درس)');
    var days=D.scheduleDays||[], times=D.scheduleTimes||[];
    var help=document.createElement('div'); help.className='a-help'; help.textContent='ستون‌های زمانی: '+times.join(' ، '); c.appendChild(help);
    days.forEach(function(day){
      var it=document.createElement('div'); it.className='a-item';
      it.innerHTML='<div class="a-item-head"><span class="a-item-title">📆 '+esc(day)+'</span></div>';
      times.forEach(function(t){
        var items=(D.schedule[day]&&D.schedule[day][t])||[];
        it.appendChild(field('ساعت '+t, items.join('\n'), function(v){
          if(!D.schedule[day]) D.schedule[day]={};
          D.schedule[day][t]=v.split('\n').filter(function(x){return x.trim();});
        }, true));
      });
      c.appendChild(it);
    });
    c.appendChild(field('یادداشت‌های زیر جدول (هر خط)', (D.scheduleNotes||[]).join('\n'), function(v){D.scheduleNotes=v.split('\n').filter(function(x){return x.trim();});}, true));
    c.appendChild(btn('💾 ذخیره','primary',persist));
    root.appendChild(c);
  }

  /* ===== شهریه ===== */
  function pFees(root){
    var f=D.fees;
    var c=card('جدول شهریه','سرستون‌ها و ردیف‌ها. هر ردیف: مقادیر را با علامت | جدا کنید');
    c.appendChild(field('سرستون‌ها (با | جدا)', (f.cols||[]).join(' | '), function(v){f.cols=v.split('|').map(function(x){return x.trim();});}));
    var txt=(f.rows||[]).map(function(r){return r.join(' | ');}).join('\n');
    c.appendChild(field('ردیف‌ها (هر خط یک ردیف، ستون‌ها با |)', txt, function(v){
      f.rows=v.split('\n').filter(function(x){return x.trim();}).map(function(line){return line.split('|').map(function(x){return x.trim();});});
    }, 'tall'));
    c.appendChild(field('یادداشت زیر جدول', f.note, function(v){f.note=v;}, true));
    c.appendChild(btn('💾 ذخیره','primary',persist));
    root.appendChild(c);
  }

  /* ===== لینک و تماس ===== */
  function pLinks(root){
    var c=card('لینک‌های مهم','سامانه‌ها و لینک‌های مهم');
    (D.links||[]).forEach(function(l,i){
      var it=document.createElement('div'); it.className='a-item';
      var hd=document.createElement('div'); hd.className='a-item-head';
      hd.innerHTML='<span class="a-item-title">'+esc(l.title)+'</span>';
      var act=document.createElement('div'); act.className='a-item-actions';
      act.appendChild(btn('🗑 حذف','danger sm',function(){D.links.splice(i,1);persist();pLinks(clear(root));}));
      hd.appendChild(act); it.appendChild(hd);
      var r1=document.createElement('div'); r1.className='a-row';
      r1.appendChild(field('آیکون', l.icon, function(v){l.icon=v;}));
      r1.appendChild(field('عنوان', l.title, function(v){l.title=v;}));
      it.appendChild(r1);
      it.appendChild(field('آدرس (URL)', l.url, function(v){l.url=v;}));
      it.appendChild(field('توضیح', l.desc, function(v){l.desc=v;}));
      c.appendChild(it);
    });
    var bar=document.createElement('div'); bar.className='a-actions-bar';
    bar.appendChild(btn('➕ افزودن لینک','',function(){D.links.push({icon:'🔗',title:'لینک جدید',url:'https://',desc:''});persist();pLinks(clear(root));}));
    bar.appendChild(btn('💾 ذخیره','primary',persist));
    c.appendChild(bar); root.appendChild(c);

    var c2=card('راه‌های ارتباطی','آیدی‌های تلگرام/کانال‌ها');
    (D.contacts||[]).forEach(function(ct,i){
      var it=document.createElement('div'); it.className='a-item';
      var hd=document.createElement('div'); hd.className='a-item-head';
      hd.innerHTML='<span class="a-item-title">'+esc(ct.name)+'</span>';
      var act=document.createElement('div'); act.className='a-item-actions';
      act.appendChild(btn('🗑 حذف','danger sm',function(){D.contacts.splice(i,1);persist();pLinks(clear(root));}));
      hd.appendChild(act); it.appendChild(hd);
      var r1=document.createElement('div'); r1.className='a-row three';
      r1.appendChild(field('نام', ct.name, function(v){ct.name=v;}));
      r1.appendChild(field('آیدی (@ یا لینک)', ct.handle, function(v){ct.handle=v;}));
      r1.appendChild(field('نقش', ct.role, function(v){ct.role=v;}));
      it.appendChild(r1);
      c2.appendChild(it);
    });
    var bar2=document.createElement('div'); bar2.className='a-actions-bar';
    bar2.appendChild(btn('➕ افزودن تماس','',function(){D.contacts.push({name:'',handle:'@',role:'',type:'telegram'});persist();pLinks(clear(root));}));
    bar2.appendChild(btn('💾 ذخیره','primary',persist));
    c2.appendChild(bar2); root.appendChild(c2);

    var c3=card('فوتر','متن پایین صفحه');
    c3.appendChild(field('متن فوتر', D.footer.text, function(v){D.footer.text=v;}));
    var r=document.createElement('div'); r.className='a-row';
    r.appendChild(field('کانال', D.footer.channel, function(v){D.footer.channel=v;}));
    r.appendChild(field('سال', D.footer.year, function(v){D.footer.year=v;}));
    c3.appendChild(r);
    c3.appendChild(btn('💾 ذخیره','primary',persist));
    root.appendChild(c3);
  }

  /* ===== تنظیمات ===== */
  function pSettings(root){
    var cPub=card('📤 انتشار تغییرات روی هاست','برای اینکه تغییرات برای همه‌ی کاربران روی هاست اعمال شود، این کار لازم است');
    var pubHelp=document.createElement('div'); pubHelp.className='a-help';
    pubHelp.innerHTML='⚠️ تغییرات شما فقط در همین مرورگر ذخیره می‌شود. برای اینکه همه‌ی کاربران سایت تغییرات را ببینند:<br>۱) دکمهٔ زیر را بزنید تا دو فایل <b>content.js</b> و <b>version.json</b> دانلود شوند.<br>۲) فایل content.js را در مسیر <b>assets/js/content.js</b> و فایل version.json را در <b>ریشهٔ سایت (کنار index.html)</b> جایگزین کنید.<br>۳) تمام! کش مرورگر کاربران خودکار دور زده می‌شود و با یک رفرش ساده، همه آخرین نسخه را می‌بینند.';
    cPub.appendChild(pubHelp);
    cPub.appendChild(btn('⬇️ دانلود فایل‌های انتشار (content.js + version.json)','primary',downloadContentJs));
    var prev=document.createElement('div'); prev.className='a-help'; prev.style.marginTop='10px';
    prev.innerHTML='👁️ برای پیش‌نمایش تغییرات خودتان قبل از انتشار، <a href=\"../?preview=1\" target=\"_blank\">اینجا را باز کنید</a>.';
    cPub.appendChild(prev);
    root.appendChild(cPub);

    var c=card('تغییر رمز عبور','رمز ورود به پنل مدیریت');
    var npw='';
    c.appendChild(field('رمز جدید', '', function(v){npw=v;}));
    c.appendChild(btn('🔑 تغییر رمز','primary',function(){ if(npw.trim()){ try{localStorage.setItem(PW_KEY,npw.trim());}catch(e){} flash('✅ رمز تغییر کرد'); } }));
    root.appendChild(c);

    var c2=card('پشتیبان‌گیری و بازگردانی','خروجی/ورودی همه‌ی محتوا به صورت JSON');
    var help=document.createElement('div'); help.className='a-help';
    help.textContent='این بخش فقط برای پشتیبان‌گیری/انتقال محتوا به صورت JSON است. برای انتشار روی هاست از بخش «انتشار تغییرات روی هاست» در بالای همین صفحه استفاده کنید.';
    c2.appendChild(help);
    var ta=document.createElement('textarea'); ta.className='a-textarea tall'; ta.value=Store.export();
    c2.appendChild(ta);
    var bar=document.createElement('div'); bar.className='a-actions-bar';
    bar.appendChild(btn('📋 کپی خروجی','',function(){ ta.select(); try{document.execCommand('copy');}catch(e){} flash('✅ کپی شد'); }));
    bar.appendChild(btn('📥 بارگذاری از متن بالا','primary',function(){ try{ Store.import(ta.value); D=Store.load(); flash('✅ بازگردانی شد'); }catch(e){ flash('⚠️ JSON نامعتبر'); } }));
    c2.appendChild(bar);
    root.appendChild(c2);

    var c3=card('بازنشانی','بازگرداندن همه‌ی محتوا به حالت پیش‌فرض');
    c3.appendChild(btn('♻️ بازنشانی به پیش‌فرض','danger',function(){ if(confirm('همه‌ی تغییرات حذف و به حالت پیش‌فرض بازمی‌گردد. مطمئنید؟')){ Store.reset(); D=Store.load(); flash('✅ بازنشانی شد'); renderPanel('general'); [].forEach.call(el('adminTabs').children,function(x){x.classList.toggle('active',x.getAttribute('data-p')==='general');}); } }));
    root.appendChild(c3);
  }

  function clear(root){ root.innerHTML=''; return root; }

  /* ---------- شروع ---------- */
  if(isAuthed()){ showApp(); }
})();
