/* OK ITHAKI V249386
   Unified normal/professional account, secure professional entry,
   shared name/avatar and preview-to-Studio delivery choice.
   This module is isolated and does not replace messages, calls, communities,
   lexicon, wall or the existing media editor. */
(function(){
  'use strict';
  const BUILD='V249413_PROFESSIONAL_ISOLATION_NO_PREVIEW';
  if(window.__ITHAKI_V249386_ACCOUNT__) return;
  window.__ITHAKI_V249386_ACCOUNT__=1;

  const $=id=>document.getElementById(id);
  const esc=v=>String(v==null?'':v).replace(/[&<>"']/g,ch=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[ch]));
  const sleep=ms=>new Promise(r=>setTimeout(r,ms));
  let accountStatus=null;
  let proToken='';
  let proAvatarDraft='';
  let countdownTimer=0;
  let syncTimer=0;
  let previewChoice='original';
  let studioReady=false;
  let installed=false;
  let profileObserver384=null;
  let profileHeartbeat384=0;
  let statusRefreshBusy384=false;
  let frozenAccountDevice386='';
  let accountMutationGeneration386=0;
  let accountStatusRequest386=0;
  let accountStatusConfirmed386=false;
  let lastStatusFetch386=0;
  let professionalOpenGeneration392=0;
  let professionalSessionValidatedAt392=0;
  const PROFESSIONAL_SESSION_CACHE_MS392=30000;
  const PROFESSIONAL_ENABLED_KEY386='ith_professional_enabled_v249386';
  function professionalSticky386(){
    try{
      if(localStorage.getItem(PROFESSIONAL_ENABLED_KEY386)==='1')return true;
      if(localStorage.getItem('ith_professional_enabled_v249385')==='1'){
        localStorage.setItem(PROFESSIONAL_ENABLED_KEY386,'1');
        return true;
      }
      const old=JSON.parse(localStorage.getItem('ith_pro_activation_result_v249384')||'null');
      if(old&&old.activated){localStorage.setItem(PROFESSIONAL_ENABLED_KEY386,'1');return true}
      return false;
    }catch(e){return false}
  }
  function setProfessionalSticky386(value){
    try{if(value)localStorage.setItem(PROFESSIONAL_ENABLED_KEY386,'1');else localStorage.removeItem(PROFESSIONAL_ENABLED_KEY386)}catch(e){}
  }

  function appState(){try{return typeof state!=='undefined'&&state?state:{}}catch(e){return{}}}
  function room(){const s=appState();return String(s.room||localStorage.getItem('ith_room')||'ithaki-phone-test')}
  function rawStateDevice386(){const s=appState();return String(s.device||s.device_id||'').trim()}
  function rawStoredDevice386(){try{return String(localStorage.getItem('ith_device')||'').trim()}catch(e){return''}}
  function deviceCandidates386(){
    const seen=new Set(),out=[];
    [frozenAccountDevice386,rawStateDevice386(),rawStoredDevice386()].forEach(value=>{value=String(value||'').trim();if(value&&!seen.has(value)){seen.add(value);out.push(value)}});
    return out
  }
  function selectAccountDevice386(value){
    value=String(value||'').trim();if(!value)return'';
    frozenAccountDevice386=value;
    try{localStorage.setItem('ith_device',value)}catch(e){}
    return value
  }
  function device(){
    if(frozenAccountDevice386)return frozenAccountDevice386;
    const candidates=deviceCandidates386();
    return selectAccountDevice386(candidates[0]||'')
  }
  function accountName(){const s=appState();return String(s.name||localStorage.getItem('ith_name')||'Μέλος').trim()}
  function accountAvatar(){const s=appState();return String(s.avatar||localStorage.getItem('ith_avatar')||('animal:'+(localStorage.getItem('ith_animal')||'🦉')))}
  function registered(){
    const name=accountName().toLocaleLowerCase('el');
    const reg=localStorage.getItem('ith_registered_member_v249154')==='1';
    const age=localStorage.getItem('ith_age16')==='1';
    const policy=localStorage.getItem('ith_policy_ok')==='1';
    return !!device()&&reg&&age&&policy&&name&&name!=='μέλος'&&name!=='member';
  }
  function rid(){try{return crypto.randomUUID()}catch(e){return 'req_'+Date.now().toString(36)+'_'+Math.random().toString(36).slice(2)}}
  function payload(extra){return Object.assign({room_id:room(),device_id:device(),client_ts:Date.now(),request_id:rid(),website:''},extra||{})}
  async function api(path,body){
    const r=await fetch(path,{method:'POST',cache:'no-store',credentials:'same-origin',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload(body))});
    let d={};try{d=await r.json()}catch(e){}
    if(!r.ok||!d||d.ok===false)throw Object.assign(new Error((d&&d.note)||('HTTP '+r.status)),{data:d});
    return d
  }
  async function fetchStatusForDevice386(dev){
    const u='/api/account/v249383/status?room_id='+encodeURIComponent(room())+'&device_id='+encodeURIComponent(dev)+'&_v='+Date.now();
    const r=await fetch(u,{cache:'no-store',credentials:'same-origin'});
    let d={};try{d=await r.json()}catch(e){}
    if(!r.ok||!d||d.ok===false)throw new Error((d&&d.note)||('HTTP '+r.status));
    return d
  }
  async function getStatus(options){
    const requestNo=++accountStatusRequest386;
    const mutationAtStart=accountMutationGeneration386;
    const candidates=deviceCandidates386();
    if(!candidates.length){const current=device();if(current)candidates.push(current)}
    let selected=null,fallback=null,lastError=null;
    for(const dev of candidates){
      try{
        const d=await fetchStatusForDevice386(dev);
        if(!fallback)fallback={dev,d};
        if(d.professional_enabled){selected={dev,d};break}
      }catch(e){lastError=e}
    }
    selected=selected||fallback;
    if(!selected)throw lastError||new Error('Δεν βρέθηκε ταυτότητα λογαριασμού.');
    const d=selected.d;
    if(requestNo!==accountStatusRequest386||mutationAtStart!==accountMutationGeneration386)return accountStatus||d;
    selectAccountDevice386(selected.dev);
    d.account_device_id=selected.dev;
    d.legacy_v249384_device_identity_reconciled=candidates.length>1;
    d.server_professional_enabled=!!d.professional_enabled;
    if(d.server_professional_enabled)setProfessionalSticky386(true);
    if(!d.server_professional_enabled&&professionalSticky386()){
      d.professional_enabled=true;
      d.professional_state_pending_server_confirmation=true;
    }
    accountStatus=d;
    accountStatusConfirmed386=true;
    lastStatusFetch386=Date.now();
    return d
  }
  async function getStableStatus386(){
    let st=await getStatus({force:true});
    if(!st.professional_state_pending_server_confirmation)return st;
    for(let attempt=0;attempt<2;attempt++){
      await sleep(350+attempt*450);
      st=await getStatus({force:true});
      if(!st.professional_state_pending_server_confirmation)return st;
    }
    return st
  }
  function note(msg,ms=5000){try{if(window.toast)window.toast(String(msg),ms);else if(window.ITH&&ITH.notifyAppEvent)ITH.notifyAppEvent(String(msg));else alert(String(msg))}catch(e){console.log(msg)}}
  const PROFESSIONAL_PASSWORD_MIN386=8;
  function validateProfessionalPasswordPair386(first,second){
    first=String(first||'');second=String(second||'');
    if(first.length<PROFESSIONAL_PASSWORD_MIN386)return{ok:false,note:'Ο επαγγελματικός κωδικός πρέπει να έχει τουλάχιστον 8 χαρακτήρες.'};
    if(first.length>128)return{ok:false,note:'Ο επαγγελματικός κωδικός είναι μεγαλύτερος από το επιτρεπτό όριο.'};
    if(first!==second)return{ok:false,note:'Οι δύο κωδικοί δεν είναι ίδιοι. Η ενεργοποίηση δεν πραγματοποιήθηκε.'};
    if(!/[\p{L}]/u.test(first))return{ok:false,note:'Ο επαγγελματικός κωδικός χρειάζεται τουλάχιστον ένα γράμμα.'};
    if(!/[0-9]/.test(first))return{ok:false,note:'Ο επαγγελματικός κωδικός χρειάζεται τουλάχιστον έναν αριθμό.'};
    return{ok:true,note:''};
  }
  function updatePasswordMatch386(firstId,secondId,statusId){
    const first=$(firstId),second=$(secondId),status=$(statusId);if(!first||!second||!status)return;
    const checked=validateProfessionalPasswordPair386(first.value,second.value);
    if(!first.value&&!second.value){status.textContent='Ελάχιστο μήκος: 8 χαρακτήρες, με γράμμα και αριθμό.';status.dataset.ok='0';return}
    status.textContent=checked.ok?'✓ Οι δύο κωδικοί είναι ίδιοι και αποδεκτοί.':checked.note;
    status.dataset.ok=checked.ok?'1':'0';
  }
  function fmtLock(seconds){
    seconds=Math.max(0,Number(seconds||0));
    const h=Math.floor(seconds/3600),m=Math.floor((seconds%3600)/60),s=Math.floor(seconds%60);
    if(h)return h+'ω '+m+'λ';
    if(m)return m+'λ '+s+'δ';
    return s+'δ';
  }
  function safeStamp384(){return new Date().toISOString().replace(/[:.]/g,'-')}
  function utf8Base64384(value){
    try{const bytes=new TextEncoder().encode(String(value||''));let binary='';bytes.forEach(b=>binary+=String.fromCharCode(b));return btoa(binary)}catch(e){return btoa(unescape(encodeURIComponent(String(value||''))))}
  }
  function professionalCredentialRecord384(name,password){
    return {
      app:'OK ITHAKI',
      version:'V249386',
      type:'PRIVATE_PROFESSIONAL_ACCESS_FILE',
      account_name:String(name||accountName()),
      professional_code:String(password||''),
      room_id:room(),
      device_id:device(),
      activated_at:new Date().toISOString(),
      recovery_available:false,
      warning:'PRIVATE FILE. The server cannot recover the professional code or unlock the Professional Center. Keep this file offline and do not share it.'
    }
  }
  function saveProfessionalCredentialFile384(name,password){
    const record=professionalCredentialRecord384(name,password);
    const json=JSON.stringify(record,null,2);
    const filename='OK_ITHAKI_PRIVATE_PROFESSIONAL_ACCESS_'+safeStamp384()+'.json';
    let path='';let method='';
    try{
      const bridge=window.OKITHAKI_ANDROID||window.AndroidBridge;
      if(bridge&&typeof bridge.setProfileFolder==='function')try{bridge.setProfileFolder(String(name||accountName()))}catch(e){}
      if(bridge&&typeof bridge.exportRecoverySnapshot==='function'){
        path=String(bridge.exportRecoverySnapshot(filename,json)||'');method='android-private-file';
      }else if(bridge&&typeof bridge.saveBase64ToProfile==='function'){
        path=String(bridge.saveBase64ToProfile('files',filename,'application/json',utf8Base64384(json))||'');method='android-profile-file';
      }
    }catch(e){path='';method=''}
    if(!path||/^error:|^NO_|^CREATE_FAILED|^OPEN_FAILED/i.test(path)){
      try{
        const blob=new Blob([json],{type:'application/json;charset=utf-8'}),a=document.createElement('a');
        a.href=URL.createObjectURL(blob);a.download=filename;document.body.appendChild(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(a.href),1500);
        path='Λήψη/'+filename;method='browser-download';
      }catch(e){return{ok:false,path:'',method:'',error:String(e&&e.message||e)}}
    }
    try{localStorage.setItem('ith_pro_credentials_saved_v249386',JSON.stringify({path,method,saved_at:Date.now(),account_name:String(name||accountName())}))}catch(e){}
    return{ok:true,path,method,filename}
  }
  function activationResult384(){try{return JSON.parse(localStorage.getItem('ith_pro_activation_result_v249384')||'null')}catch(e){return null}}
  function storeActivationResult384(value){try{localStorage.setItem('ith_pro_activation_result_v249384',JSON.stringify(value||{}))}catch(e){}}
  function showActivationNotice384(st,fileResult){
    const result={activated:true,at:Date.now(),saved:!!(fileResult&&fileResult.ok),path:String(fileResult&&fileResult.path||''),account_name:String(st&&st.account_name||accountName())};
    storeActivationResult384(result);appendProfilePanel();
  }
  function renderActivationNotice384(wrap){
    if(!wrap)return;let result=activationResult384();let box=$('ithActivationNotice384');
    if(!result||!result.activated){if(box)box.remove();return}
    if(!box){box=document.createElement('section');box.id='ithActivationNotice384';box.className='card ithActivationNotice384';const panel=$('ithAccountPanel383');if(panel&&panel.parentNode===wrap)panel.after(box);else wrap.insertBefore(box,wrap.firstChild)}
    const saved=result.saved,signature=[result.activated,result.at,saved,result.path,result.account_name].join('|');
    if(box.dataset.signature!==signature){
      box.dataset.signature=signature;
      box.innerHTML=`<b>✅ Το Επαγγελματικό Κέντρο ενεργοποιήθηκε.</b><div style="margin-top:5px">Για κάθε είσοδο χρησιμοποίησε τον ίδιο κωδικό που όρισες στην ενεργοποίηση.</div><div style="margin-top:5px">${saved?'Το ιδιωτικό αρχείο πρόσβασης αποθηκεύτηκε στο κινητό.':'Δεν αποθηκεύτηκε αρχείο κωδικού. Δεν υπάρχει ανάκτηση από τον server.'}</div>${saved&&result.path?`<div class="path">${esc(result.path)}</div>`:''}<div class="ithButtons383"><button class="ithBtn383 gold" id="ithActivationOpen384">Άνοιγμα επαγγελματικού μενού</button><button class="ithBtn383" id="ithActivationDismiss384">Κατάλαβα</button></div>`;
      $('ithActivationOpen384').onclick=openAccountCenter;$('ithActivationDismiss384').onclick=()=>{try{localStorage.removeItem('ith_pro_activation_result_v249384')}catch(e){};box.remove()};
    }
  }
  function ensureProfileQuickButton384(){if(window.__ITHAKI_PROFILE_EXCLUSIVE_R10F37F1F3__){document.getElementById('ithProQuick384')?.remove();return}
    let q=$('ithProQuick384');if(!q){q=document.createElement('button');q.id='ithProQuick384';q.type='button';q.title='Επαγγελματικό Κέντρο';q.setAttribute('aria-label','Επαγγελματικό Κέντρο');q.textContent='💼';q.onclick=openAccountCenter;document.body.appendChild(q)}
    return q
  }
  function profileVisible384(){const p=$('profilePage');return !!(p&&(document.body&&document.body.getAttribute('data-page')==='profile'||p.classList.contains('active')))}
  async function refreshPanelStatus384(force){
    if(statusRefreshBusy384||!registered())return;
    if(!force&&accountStatusConfirmed386&&Date.now()-lastStatusFetch386<8000){appendProfilePanel();return}
    statusRefreshBusy384=true;
    try{await getStatus({force:!!force});appendProfilePanel()}catch(e){console.warn(BUILD,'panel status',e)}finally{statusRefreshBusy384=false}
  }
  function injectCss(){
    if($('ithAccountCss383'))return;
    const st=document.createElement('style');st.id='ithAccountCss383';
    st.textContent=`
      .ithAccountPanel383{border:1px solid rgba(255,217,110,.32)!important;background:radial-gradient(circle at 8% 0,rgba(255,217,110,.18),transparent 32%),linear-gradient(145deg,rgba(7,24,39,.97),rgba(4,13,23,.98))!important;box-shadow:0 18px 52px rgba(0,0,0,.34)!important}
      .ithAccountHead383{display:flex;align-items:center;gap:11px}.ithAccountHead383 .badge{margin-left:auto;padding:6px 10px;border-radius:999px;border:1px solid rgba(255,217,110,.28);color:#ffe39b;font-size:12px;font-weight:900}
      .ithAccountModes383{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}.ithAccountModes383 button{min-height:52px;border-radius:17px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.065);color:#fff;font-weight:900}.ithAccountModes383 button.active{border-color:#f0c768;background:linear-gradient(135deg,rgba(177,115,28,.65),rgba(240,204,104,.24));color:#fff3ca}
      .ithAccountPrivacy383{margin-top:9px;color:rgba(235,247,255,.72);font-size:12px;line-height:1.4}
      .ithModal383{position:fixed;z-index:2147483647;inset:0;background:rgba(0,0,0,.78);display:grid;place-items:center;padding:12px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
      .ithModal383[hidden]{display:none!important}.ithModalBox383{width:min(720px,96vw);max-height:92dvh;overflow:auto;border-radius:25px;border:1px solid rgba(255,217,110,.38);background:linear-gradient(160deg,#071421,#02070d);color:#fff;box-shadow:0 30px 100px rgba(0,0,0,.78);padding:14px}
      .ithModalTop383{display:flex;align-items:center;gap:10px;position:sticky;top:-14px;z-index:3;background:rgba(5,17,29,.96);padding:12px 2px;border-bottom:1px solid rgba(255,255,255,.09)}.ithModalTop383 h2{font-size:20px;margin:0;flex:1;color:#ffe09a}.ithClose383{width:42px;height:42px;border-radius:50%;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.08);color:#fff;font-size:20px}
      .ithForm383{display:grid;gap:10px;margin-top:12px}.ithForm383 label{display:grid;gap:5px;color:rgba(239,248,255,.78);font-size:12px;font-weight:800}.ithForm383 input,.ithForm383 select{width:100%;height:45px;border-radius:14px;border:1px solid rgba(255,255,255,.16);background:rgba(0,0,0,.38);color:#fff;padding:0 12px;outline:none}.ithForm383 input:focus,.ithForm383 select:focus{border-color:#f0c768}
      .ithButtons383{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.ithBtn383{min-height:43px;padding:9px 14px;border-radius:999px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.08);color:#fff;font-weight:900}.ithBtn383.gold{background:linear-gradient(135deg,#a96e1d,#f1cf77);color:#1b1104;border-color:#ffe49c}.ithBtn383.danger{border-color:rgba(255,91,118,.4);background:rgba(255,60,95,.14)}
      .ithSecurityCard383{border-radius:18px;padding:11px;border:1px solid rgba(54,240,160,.24);background:rgba(54,240,160,.07);font-size:12px;line-height:1.5}.ithWarn383{border-color:rgba(255,191,81,.35);background:rgba(255,191,81,.09)}
      .ithAvatarEdit383{display:grid;grid-template-columns:72px 1fr;gap:12px;align-items:center}.ithAvatarPreview383{width:72px;height:72px;border-radius:24px;overflow:hidden;display:grid;place-items:center;background:rgba(255,255,255,.08);border:1px solid rgba(255,217,110,.34);font-size:34px}.ithAvatarPreview383 img{width:100%;height:100%;object-fit:cover}
      .ithPreviewChoice383{border:1px solid rgba(85,215,255,.24);background:linear-gradient(145deg,rgba(8,31,48,.93),rgba(4,13,23,.95));border-radius:18px;padding:11px;display:grid;gap:8px}.ithPreviewChoice383 h3{margin:0;color:#a9ecff;font-size:15px}.ithChoiceRow383{display:grid;grid-template-columns:1fr 1fr;gap:8px}.ithChoice383{display:flex;align-items:flex-start;gap:8px;border:1px solid rgba(255,255,255,.13);border-radius:15px;padding:10px;background:rgba(255,255,255,.055);color:#fff}.ithChoice383.active{border-color:#f0c768;background:rgba(240,199,104,.11)}.ithChoice383 input{margin-top:3px}.ithStudioState383{font-size:12px;color:rgba(239,248,255,.72)}

      .ithProHero383{padding:15px;border-radius:20px;border:1px solid rgba(255,217,110,.34);background:linear-gradient(135deg,rgba(177,115,28,.22),rgba(54,215,255,.07));margin-top:12px}.ithProHero383 h3{margin:0;color:#ffe09a;font-size:19px}.ithProHero383 p{margin:6px 0 0;color:rgba(239,248,255,.76);line-height:1.45;font-size:12px}
      .ithToolGrid383{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:11px}.ithTool383{min-height:124px;text-align:left;padding:13px;border-radius:19px;border:1px solid rgba(255,255,255,.13);background:linear-gradient(145deg,rgba(255,255,255,.065),rgba(0,0,0,.18));color:#fff;display:grid;align-content:start;gap:5px}.ithTool383 b{color:#ffe09a;font-size:15px}.ithTool383 small{color:rgba(233,244,252,.72);line-height:1.4}.ithTool383 span{justify-self:start;margin-top:5px;padding:4px 8px;border-radius:999px;border:1px solid rgba(54,240,160,.22);background:rgba(54,240,160,.08);color:#c9f3dd;font-size:10px;font-weight:900}.ithTool383.wall{border-color:rgba(255,217,110,.38);background:linear-gradient(145deg,rgba(177,115,28,.18),rgba(0,0,0,.2))}
      .ithV405Mini383{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:9px}.ithV405Mini383 div{padding:8px;border-radius:13px;background:rgba(0,0,0,.25);text-align:center}.ithV405Mini383 b{display:block;color:#ffe09a;font-size:17px}.ithV405Mini383 small{font-size:9px;color:rgba(239,248,255,.65)}
      .ithProfileProTop383{order:-1000;margin-bottom:12px!important;border:1px solid rgba(255,217,110,.5)!important;background:radial-gradient(circle at 15% 0,rgba(255,217,110,.23),transparent 36%),linear-gradient(145deg,rgba(7,24,39,.98),rgba(4,13,23,.99))!important}.ithProfileProButton383{width:100%;min-height:58px;border-radius:18px;border:1px solid rgba(255,226,150,.55);background:linear-gradient(135deg,#9d651a,#e8c467);color:#1b1104;font-weight:1000;font-size:16px;box-shadow:0 12px 35px rgba(0,0,0,.3)}
      @media(max-width:620px){.ithToolGrid383{grid-template-columns:1fr}.ithV405Mini383{grid-template-columns:repeat(2,minmax(0,1fr))}}
      @media(max-width:620px){.ithAccountModes383,.ithChoiceRow383{grid-template-columns:1fr}.ithModalBox383{padding:10px}.ithModalTop383{top:-10px}}
      #ithAccountPanel383{display:block!important;visibility:visible!important;opacity:1!important;position:relative!important;z-index:4!important}
      .ithActivationNotice384{border:1px solid rgba(54,240,160,.48)!important;background:linear-gradient(145deg,rgba(14,72,52,.88),rgba(5,30,27,.94))!important;color:#edfff6!important;padding:13px!important;border-radius:18px!important;box-shadow:0 14px 34px rgba(0,0,0,.28)!important}
      .ithActivationNotice384 b{color:#bfffe0}.ithActivationNotice384 .path{word-break:break-all;font-size:11px;opacity:.78;margin-top:7px}.ithActivationNotice384 button{margin-top:9px}
      #ithProQuick384{position:fixed;z-index:2147483000;right:12px;bottom:calc(82px + var(--safe-bottom,0px));min-width:58px;height:58px;border-radius:19px;border:1px solid rgba(255,230,160,.65);background:linear-gradient(135deg,#a86d1d,#f2cf77);color:#1b1003;font-size:25px;font-weight:1000;box-shadow:0 16px 38px rgba(0,0,0,.48);display:none;place-items:center}
      body[data-page="profile"] #ithProQuick384{display:grid!important}
      .ithNoRecovery384{border-color:rgba(255,87,112,.48)!important;background:rgba(255,55,90,.11)!important;color:#ffe7eb!important}.ithNoRecovery384 strong{color:#ffbdc8}
      .ithConfirm384{display:flex!important;grid-template-columns:auto 1fr!important;align-items:flex-start!important;gap:9px!important;padding:10px!important;border-radius:15px!important;border:1px solid rgba(255,217,110,.28)!important;background:rgba(255,217,110,.07)!important}.ithConfirm384 input{width:20px!important;height:20px!important;margin-top:1px!important}
      @media(max-width:620px){#ithProQuick384{right:8px;bottom:calc(78px + var(--safe-bottom,0px));width:54px;min-width:54px;height:54px}}

    `;
    document.head.appendChild(st);
  }
  function ensureModal(){
    let m=$('ithAccountModal383');if(m)return m;
    m=document.createElement('div');m.id='ithAccountModal383';m.className='ithModal383';m.hidden=true;
    m.innerHTML='<div class="ithModalBox383"><div class="ithModalTop383"><h2 id="ithModalTitle383">Λογαριασμός ΙΘΑΚΗ</h2><button class="ithClose383" id="ithModalClose383" type="button">×</button></div><div id="ithModalBody383"></div></div>';
    document.body.appendChild(m);
    $('ithModalClose383').onclick=closeAccountModal;
    m.addEventListener('click',e=>{if(e.target===m)closeAccountModal()});
    return m;
  }
  function showModal(title,html){
    injectCss();const m=ensureModal();$('ithModalTitle383').textContent=title;$('ithModalBody383').innerHTML=html;m.hidden=false;
  }
  function hideModal(){const m=$('ithAccountModal383');if(m)m.hidden=true;clearInterval(countdownTimer);countdownTimer=0}
  async function closeAccountModal(){
    const token=proToken;proToken='';professionalSessionValidatedAt392=0;professionalOpenGeneration392++;try{sessionStorage.removeItem('ith_pro_session_249383')}catch(e){}
    hideModal();
    if(token){try{await api('/api/account/v249383/professional/close',{session_token:token})}catch(e){}}
    accountStatus=null;setTimeout(appendProfilePanel,80);return false
  }
  function memberRequired(){
    showModal('Χρειάζεται προφίλ μέλους',`<div class="ithSecurityCard383 ithWarn383"><b>Η Ροή και ο επαγγελματικός λογαριασμός ανοίγουν μόνο σε εγγεγραμμένο μέλος.</b><br>Αποθήκευσε κανονικό όνομα, επιβεβαίωσε ηλικία και πολιτική. Δεν χρειάζεται email ή τηλέφωνο.</div><div class="ithButtons383"><button class="ithBtn383 gold" id="ithGoProfile383">Άνοιγμα Προφίλ</button><button class="ithBtn383" id="ithMemberCancel383">Κλείσιμο</button></div>`);
    $('ithGoProfile383').onclick=()=>{hideModal();try{window.ITH&&ITH.page&&ITH.page('profile')}catch(e){}};
    $('ithMemberCancel383').onclick=hideModal;
  }
  async function openAccountCenter(){
    if(!registered()){memberRequired();return false}
    const generation=++professionalOpenGeneration392;
    const remembered=professionalSticky386()||!!(accountStatus&&accountStatus.professional_enabled);
    if(remembered){
      const local=Object.assign({professional_enabled:true,account_mode:'normal',account_name:accountName(),avatar:accountAvatar(),lock_seconds:0,fast_local_gate_v249392:true},accountStatus||{});
      renderGate(local);
      // Fast first paint: the password gate opens immediately. Server truth is refreshed without blocking the menu.
      getStatus({force:false}).then(st=>{
        if(generation!==professionalOpenGeneration392)return;
        if(!st.professional_enabled){renderSetup(st);return}
        if(Number(st.lock_seconds||0)>0){renderLocked(st);return}
        accountStatus=st;
      }).catch(e=>console.warn(BUILD,'fast professional refresh',e));
      return false
    }
    showModal('Λογαριασμός ΙΘΑΚΗ','<div class="ithSecurityCard383">Έλεγχος ασφαλούς λογαριασμού…</div>');
    try{
      const st=await getStableStatus386();
      if(generation!==professionalOpenGeneration392)return false;
      if(st.professional_state_pending_server_confirmation){
        showModal('Επαγγελματικό Κέντρο',`<div class="ithSecurityCard383 ithWarn383"><b>Η συσκευή θυμάται ότι το Επαγγελματικό Κέντρο έχει ενεργοποιηθεί.</b><br>Ο server δεν ολοκλήρωσε ακόμη την επιβεβαίωση. Δεν θα εμφανιστεί ξανά ενεργοποίηση από την αρχή.</div><div class="ithButtons383"><button class="ithBtn383 gold" id="ithRetryStable386">Επανάληψη ελέγχου</button><button class="ithBtn383" id="ithStableClose386">Κλείσιμο</button></div>`);
        $('ithRetryStable386').onclick=openAccountCenter;$('ithStableClose386').onclick=hideModal;return false
      }
      if(!st.professional_enabled)renderSetup(st);else renderGate(st);
    }catch(e){showModal('Λογαριασμός ΙΘΑΚΗ',`<div class="ithSecurityCard383 ithWarn383"><b>Δεν φορτώθηκε ο λογαριασμός.</b><br>${esc(e.message||e)}</div><div class="ithButtons383"><button class="ithBtn383" id="ithRetry383">Επανάληψη</button></div>`);$('ithRetry383').onclick=openAccountCenter}
    return false
  }
  function avatarMarkup(value,name){
    value=String(value||'');
    if(value.startsWith('data:image/')||value.startsWith('http')||value.startsWith('/'))return `<img src="${esc(value)}" alt="">`;
    if(value.startsWith('animal:'))return esc(value.slice(7));
    return esc((name||'Μ')[0]||'Μ')
  }
  function renderSetup(st){
    proAvatarDraft=String(st.avatar||accountAvatar());
    showModal('Ενεργοποίηση επαγγελματικού κέντρου',`
      <div class="ithSecurityCard383"><b>Ένας λογαριασμός, ένα κοινό όνομα και μία φωτογραφία.</b><br>Ο κωδικός που θα ορίσεις τώρα είναι ο ίδιος κωδικός με τον οποίο θα ανοίγεις το Επαγγελματικό Κέντρο κάθε φορά.</div>
      <div class="ithSecurityCard383 ithNoRecovery384"><strong>⚠ Δεν υπάρχει ανάκτηση επαγγελματικού κωδικού ή ξεκλείδωμα από τον server.</strong><br>Αν χαθεί ο κωδικός και δεν έχεις κρατήσει το ιδιωτικό αρχείο, η επαγγελματική πρόσβαση δεν μπορεί να επανέλθει.</div>
      <div class="ithForm383">
        <label>Κοινό όνομα<input id="ithSetupName383" maxlength="80" value="${esc(st.account_name||accountName())}"></label>
        <label>Επαγγελματικός κωδικός<input id="ithSetupPass383" type="password" minlength="8" maxlength="128" required autocomplete="new-password" placeholder="Τουλάχιστον 8 χαρακτήρες, γράμμα και αριθμός"></label>
        <label>Επανάληψη κωδικού<input id="ithSetupPass2383" type="password" minlength="8" maxlength="128" required autocomplete="new-password"></label>
        <div id="ithSetupPassStatus386" class="ithAccountPrivacy383">Ελάχιστο μήκος: 8 χαρακτήρες, με γράμμα και αριθμό.</div>
        <label class="ithConfirm384"><input id="ithNoRecoveryConfirm383" type="checkbox"><span>Καταλαβαίνω ότι δεν υπάρχει ανάκτηση από τον server και ότι πρέπει να φυλάξω ιδιωτικά τον κωδικό ή το αρχείο που θα αποθηκευτεί στο κινητό.</span></label>
        <input id="ithBot383" tabindex="-1" autocomplete="off" style="position:absolute;left:-10000px;width:1px;height:1px" aria-hidden="true">
      </div>
      <div class="ithButtons383"><button class="ithBtn383 gold" id="ithSetupSave383">Ενεργοποίηση και αποθήκευση</button><button class="ithBtn383" id="ithSetupCancel383">Κλείσιμο</button></div>
      <div class="ithAccountPrivacy383">Ο server αποθηκεύει μόνο ισχυρό PBKDF2 hash. Ο πραγματικός κωδικός δεν αποθηκεύεται στον server. Μετά την ενεργοποίηση θα ερωτηθείς αν θέλεις ιδιωτικό αρχείο στο κινητό.</div>
    `);
    $('ithSetupSave383').onclick=setupProfessional;
    $('ithSetupCancel383').onclick=hideModal;
    ['ithSetupPass383','ithSetupPass2383'].forEach(id=>$(id).addEventListener('input',()=>updatePasswordMatch386('ithSetupPass383','ithSetupPass2383','ithSetupPassStatus386')));
  }
  async function setupProfessional(){
    const name=String($('ithSetupName383').value||'').trim();
    let p1=String($('ithSetupPass383').value||''),p2=String($('ithSetupPass2383').value||'');
    const passwordCheck=validateProfessionalPasswordPair386(p1,p2);
    if(!passwordCheck.ok){note(passwordCheck.note,7000);updatePasswordMatch386('ithSetupPass383','ithSetupPass2383','ithSetupPassStatus386');return}
    if(!$('ithNoRecoveryConfirm383')||!$('ithNoRecoveryConfirm383').checked){note('Χρειάζεται να επιβεβαιώσεις ότι δεν υπάρχει ανάκτηση κωδικού.',7000);return}
    if(!window.confirm('Τελική επιβεβαίωση: ο κωδικός δεν ανακτάται από τον server. Να ενεργοποιηθεί το Επαγγελματικό Κέντρο;'))return;
    const btn=$('ithSetupSave383');btn.disabled=true;btn.textContent='Ενεργοποίηση…';
    try{
      const st=await api('/api/account/v249383/professional/setup',{account_name:name,avatar:accountAvatar(),password:p1,password_confirm:p2,website:String($('ithBot383').value||'')});
      accountMutationGeneration386++;
      setProfessionalSticky386(true);
      accountStatusConfirmed386=true;
      lastStatusFetch386=Date.now();
      accountStatus=Object.assign({},st,{professional_enabled:true,server_professional_enabled:true,professional_state_pending_server_confirmation:false});
      const passForFile=p1;
      if($('ithSetupPass383'))$('ithSetupPass383').value='';if($('ithSetupPass2383'))$('ithSetupPass2383').value='';p1='';p2='';
      hideModal();appendProfilePanel();
      let fileResult={ok:false,path:'',method:'skipped'};
      const wantsFile=window.confirm('Το Επαγγελματικό Κέντρο ενεργοποιήθηκε. Να αποθηκευτεί τώρα ιδιωτικό αρχείο με το όνομα λογαριασμού και τον επαγγελματικό κωδικό στο κινητό; Το αρχείο είναι ευαίσθητο και δεν πρέπει να κοινοποιηθεί.');
      if(wantsFile)fileResult=saveProfessionalCredentialFile384(name,passForFile);
      showActivationNotice384(accountStatus,fileResult);
      note(fileResult.ok?'Ενεργοποιήθηκε και αποθηκεύτηκε ιδιωτικό αρχείο στο κινητό.':'Ενεργοποιήθηκε. Χρησιμοποίησε τον ίδιο κωδικό σε κάθε είσοδο.',9000);
    }catch(e){
      const msg=String((e&&e.data&&e.data.note)||e.message||e||'');
      if(/ήδη ενεργ|already/i.test(msg)){
        setProfessionalSticky386(true);accountMutationGeneration386++;accountStatusConfirmed386=false;hideModal();
        note('Το Επαγγελματικό Κέντρο είναι ήδη ενεργό. Ζητείται ο κωδικός εισόδου.',7000);setTimeout(openAccountCenter,250);return
      }
      note(msg,7000);btn.disabled=false;btn.textContent='Ενεργοποίηση και αποθήκευση'
    }
  }
  function renderGate(st){
    if(Number(st.lock_seconds||0)>0){renderLocked(st);return}
    showModal('Είσοδος στο επαγγελματικό μενού',`
      <div class="ithAvatarEdit383"><div class="ithAvatarPreview383">${avatarMarkup(st.avatar||accountAvatar(),st.account_name||accountName())}</div><div><b>${esc(st.account_name||accountName())}</b><div class="ithAccountPrivacy383">Χρησιμοποίησε τον ίδιο κωδικό που όρισες στην ενεργοποίηση. Με 5 λάθη: 30 λεπτά. Με άλλα 5 λάθη μετά: μία ημέρα. Δεν υπάρχει ανάκτηση από τον server.</div></div></div>
      <div class="ithForm383"><label>Επαγγελματικός κωδικός<input id="ithUnlockPass383" type="password" maxlength="128" autocomplete="current-password" autofocus></label><input id="ithUnlockBot383" tabindex="-1" autocomplete="off" style="position:absolute;left:-10000px;width:1px;height:1px" aria-hidden="true"></div>
      <div class="ithButtons383"><button class="ithBtn383 gold" id="ithUnlock383">Είσοδος</button><button class="ithBtn383" id="ithGateClose383">Κλείσιμο</button></div>
      <div id="ithGateNote383" class="ithAccountPrivacy383">Αποτυχημένες προσπάθειες τρέχοντος κύκλου: ${Number(st.failed_attempts||0)}/5.</div>
    `);
    $('ithUnlock383').onclick=unlockProfessional;$('ithGateClose383').onclick=hideModal;
    $('ithUnlockPass383').addEventListener('keydown',e=>{if(e.key==='Enter')unlockProfessional()});
    setTimeout(()=>$('ithUnlockPass383')&&$('ithUnlockPass383').focus(),60)
  }
  function renderLocked(st){
    showModal('Προσωρινό κλείδωμα επαγγελματικού λογαριασμού',`
      <div class="ithSecurityCard383 ithWarn383"><b>${esc(st.note||'Η πρόσβαση είναι κλειδωμένη.')}</b><br>Υπόλοιπο: <strong id="ithLockCount383">${fmtLock(st.lock_seconds)}</strong></div>
      <div class="ithAccountPrivacy383">Το κανονικό προφίλ παραμένει διαθέσιμο. Το κλείδωμα αφορά μόνο το επαγγελματικό μενού.</div>
      <div class="ithButtons383"><button class="ithBtn383" id="ithLockedClose383">Κλείσιμο</button></div>
    `);
    $('ithLockedClose383').onclick=hideModal;
    let left=Number(st.lock_seconds||0);clearInterval(countdownTimer);countdownTimer=setInterval(()=>{left=Math.max(0,left-1);const e=$('ithLockCount383');if(e)e.textContent=fmtLock(left);if(!left){clearInterval(countdownTimer);countdownTimer=0;openAccountCenter()}},1000)
  }
  async function unlockProfessional(){
    const password=String($('ithUnlockPass383').value||''),btn=$('ithUnlock383');btn.disabled=true;btn.textContent='Έλεγχος…';
    try{
      const st=await api('/api/account/v249383/professional/unlock',{password,website:String($('ithUnlockBot383').value||'')});
      proToken=String(st.session_token||'');professionalSessionValidatedAt392=Date.now();try{sessionStorage.setItem('ith_pro_session_249383',proToken)}catch(e){}
      accountStatus=st;renderProfessional(st)
    }catch(e){
      const d=e.data||{};if(d.locked){renderLocked(d);return}
      const n=$('ithGateNote383');if(n)n.textContent=d.note||e.message||String(e);
      btn.disabled=false;btn.textContent='Είσοδος';const p=$('ithUnlockPass383');if(p){p.value='';p.focus()}
    }
  }

  const PROFESSIONAL_TOOLS383={
    v405:{open:()=>window.ITH&&ITH.openCreatorViewsV249405&&ITH.openCreatorViewsV249405()},
    v406:{open:()=>window.ITH&&ITH.openCreatorStatsV249406&&ITH.openCreatorStatsV249406()},
    v407:{open:()=>window.ITH&&ITH.openCreatorQualityV249407&&ITH.openCreatorQualityV249407()},
    v408:{open:()=>window.ITH&&ITH.openCreatorSharesV249408&&ITH.openCreatorSharesV249408()},
    v409:{open:()=>window.ITH&&ITH.openCreatorBestTimeV249409&&ITH.openCreatorBestTimeV249409()},
    v411:{open:()=>window.ITH&&ITH.openWallV411&&ITH.openWallV411()}
  };
  async function validateProfessionalSession383(force){
    if(!proToken)throw new Error('Η επαγγελματική συνεδρία έχει κλείσει.');
    if(!force&&Date.now()-professionalSessionValidatedAt392<PROFESSIONAL_SESSION_CACHE_MS392)return{ok:true,cached:true,version:'V249392'};
    const d=await api('/api/account/v249383/professional/session/validate',{session_token:proToken});
    professionalSessionValidatedAt392=Date.now();
    return d
  }
  async function openProfessionalTool383(key){
    const tool=PROFESSIONAL_TOOLS383[key];if(!tool)return false;
    // The source menu disappears immediately; validation and command execution continue without leaving it frozen on screen.
    hideModal();
    try{await validateProfessionalSession383(false)}catch(e){proToken='';professionalSessionValidatedAt392=0;note(e.message||e,7000);setTimeout(openAccountCenter,120);return false}
    if(key==='v411'){
      await closeAccountModal();
      if(typeof tool.open==='function')tool.open();else note('Ο Ζωντανός Τοίχος δεν φόρτωσε.',7000);
      return false
    }
    try{if(typeof tool.open==='function')tool.open();else throw new Error('Το εργαλείο δεν είναι διαθέσιμο.')}catch(e){note(e.message||e,7000);setTimeout(()=>renderProfessional(accountStatus||{}),120)}
    return false
  }
  async function loadV405Mini383(){
    const host=$('ithV405Mini383');if(!host)return;
    try{
      const r=await fetch('/api/creator/views/summary_v249405?room_id='+encodeURIComponent(room())+'&device_id='+encodeURIComponent(device())+'&days=30&_v='+Date.now(),{cache:'no-store',credentials:'same-origin'});
      const d=await r.json();if(!r.ok||!d||d.ok===false)throw new Error((d&&d.detail)||('HTTP '+r.status));const s=d.summary||{};
      host.innerHTML=`<div><b>${Number(s.valid_views||0)}</b><small>ΠΡΟΒΟΛΕΣ</small></div><div><b>${Number(s.unique_viewers||0)}</b><small>ΜΟΝΑΔΙΚΟΙ</small></div><div><b>${Math.round(Number(s.active_watch_ms||0)/60000)}′</b><small>ΘΕΑΣΗ</small></div><div><b>${Number(s.completions||0)}</b><small>ΟΛΟΚΛΗΡΩΣΕΙΣ</small></div>`;
    }catch(e){host.innerHTML='<div style="grid-column:1/-1"><small>Τα V405 στοιχεία θα εμφανιστούν μόλις υπάρξουν πραγματικές προβολές.</small></div>'}
  }

  function renderProfessional(st){
    proAvatarDraft=String(st.avatar||accountAvatar());
    showModal('💼 Επαγγελματικό Κέντρο ΙΘΑΚΗ',`
      <div class="ithSecurityCard383"><b>Ασφαλής επαγγελματική συνεδρία</b><br>Το Κέντρο ανοίγει μόνο μετά τον ιδιωτικό κωδικό. Η συνεδρία κλείνει όταν κλείσεις το μενού.</div>
      <section class="ithProHero383"><h3>Πραγματικά εργαλεία δημιουργού</h3><p>V405–V409 χρησιμοποιούν πραγματικά συμβάντα προβολών. Το επαγγελματικό κέντρο δεν επεξεργάζεται δημοσιεύσεις και δεν διαβάζει ή αλλάζει φίλους και επαφές.</p><div id="ithV405Mini383" class="ithV405Mini383"><div style="grid-column:1/-1"><small>Φόρτωση πραγματικών στοιχείων…</small></div></div></section>
      <div class="ithToolGrid383">
        <button class="ithTool383" data-pro-tool383="v405"><b>👁 V405 — Πραγματικές προβολές</b><small>Έγκυρες προβολές, μοναδικοί θεατές, ενεργός χρόνος και ολοκληρώσεις.</small><span>ΛΕΙΤΟΥΡΓΕΙ</span></button>
        <button class="ithTool383" data-pro-tool383="v406"><b>📊 V406 — Στατιστικά βίντεο</b><small>Στοιχεία ανά βίντεο, completion rate και χρόνος θέασης.</small><span>ΛΕΙΤΟΥΡΓΕΙ</span></button>
        <button class="ithTool383" data-pro-tool383="v407"><b>🌿 V407 — Ποιότητα θέασης</b><small>Προσοχή, επαναλήψεις και βάθος θέασης χωρίς διάγνωση ανθρώπων.</small><span>ΛΕΙΤΟΥΡΓΕΙ</span></button>
        <button class="ithTool383" data-pro-tool383="v408"><b>🔗 V408 — Ιδιωτικές κοινοποιήσεις</b><small>Μετρά επιτυχημένες κοινοποιήσεις μέσω μηνυμάτων χωρίς στοιχεία παραλήπτη.</small><span>ΛΕΙΤΟΥΡΓΕΙ</span></button>
        <button class="ithTool383" data-pro-tool383="v409"><b>🕰️ V409 — Καλύτερη ώρα</b><small>Πρόταση από πραγματικές προβολές και κοινοποιήσεις με εξήγηση.</small><span>ΛΕΙΤΟΥΡΓΕΙ</span></button>
        <button id="ithPublicLinkTool388" class="ithTool383 creator-direct388" type="button"><b>🔗 Δημόσιο link δημιουργού</b><small>Link για TikTok/Instagram bio, αντιγραφή, κοινοποίηση, QR και πραγματικές προβολές.</small><span>V249388 ΟΡΑΤΟ</span></button>
      </div>
      <div class="ithSecurityCard383" data-professional-isolation-v249413="1"><b>Απομονωμένο επαγγελματικό κέντρο</b><br>Δεν αλλάζει όνομα, φωτογραφία, λειτουργία λογαριασμού, φίλους ή επαφές. Η κανονική δημοσίευση γίνεται μόνο από το + της ΙΘΑΚΗΣ.</div>
      <details class="ithSecurityCard383" style="margin-top:12px"><summary><b>Αλλαγή επαγγελματικού κωδικού</b></summary><div class="ithForm383"><label>Νέος κωδικός<input id="ithNewPass383" type="password" minlength="8" maxlength="128" required autocomplete="new-password"></label><label>Επανάληψη<input id="ithNewPass2383" type="password" minlength="8" maxlength="128" required autocomplete="new-password"></label><div id="ithNewPassStatus386" class="ithAccountPrivacy383">Ελάχιστο μήκος: 8 χαρακτήρες, με γράμμα και αριθμό.</div></div><div class="ithButtons383"><button class="ithBtn383" id="ithChangePass383">Αλλαγή κωδικού</button></div></details>
      <div class="ithButtons383"><button class="ithBtn383 danger" id="ithProClose383">Κλείσιμο επαγγελματικού μενού</button></div>
    `);
    $('ithChangePass383').onclick=changePassword;$('ithProClose383').onclick=closeAccountModal;
    ['ithNewPass383','ithNewPass2383'].forEach(id=>$(id).addEventListener('input',()=>updatePasswordMatch386('ithNewPass383','ithNewPass2383','ithNewPassStatus386')));
    document.querySelectorAll('[data-pro-tool383]').forEach(btn=>{btn.setAttribute('data-ithaki-command-close','professional-tool');btn.onclick=()=>openProfessionalTool383(btn.dataset.proTool383)});
    if('requestIdleCallback' in window)requestIdleCallback(loadV405Mini383,{timeout:900});else setTimeout(loadV405Mini383,180);
  }
  async function imageToDataUrl(file){
    if(!file||!String(file.type||'').startsWith('image/'))throw new Error('Επίλεξε φωτογραφία.');
    const url=URL.createObjectURL(file),img=new Image();
    await new Promise((res,rej)=>{img.onload=res;img.onerror=()=>rej(new Error('Η φωτογραφία δεν διαβάστηκε.'));img.src=url});
    const max=512,r=Math.min(1,max/Math.max(img.naturalWidth||1,img.naturalHeight||1)),c=document.createElement('canvas');
    c.width=Math.max(1,Math.round((img.naturalWidth||1)*r));c.height=Math.max(1,Math.round((img.naturalHeight||1)*r));
    c.getContext('2d',{alpha:false}).drawImage(img,0,0,c.width,c.height);URL.revokeObjectURL(url);
    return c.toDataURL('image/jpeg',.84)
  }
  async function pickAvatar(){
    try{proAvatarDraft=await imageToDataUrl(this.files&&this.files[0]);const p=$('ithProAvatarPreview383');if(p)p.innerHTML='<img src="'+esc(proAvatarDraft)+'" alt="">'}catch(e){note(e.message||e)}
  }
  function applySharedProfile(name,avatar){
    try{
      if(typeof state!=='undefined'){state.name=name;state.avatar=avatar.startsWith('animal:')?'':avatar;if(avatar.startsWith('animal:'))state.animal=avatar.slice(7)}
      localStorage.setItem('ith_name',name);
      if(avatar.startsWith('animal:')){localStorage.setItem('ith_avatar','');localStorage.setItem('ith_animal',avatar.slice(7))}
      else localStorage.setItem('ith_avatar',avatar);
      localStorage.setItem('ith_profile_name_locked_v249164',name);
      localStorage.setItem('ith_registered_member_v249154','1');
      if(typeof persistProfile==='function')persistProfile();
      if(typeof heartbeat==='function')Promise.resolve(heartbeat()).catch(()=>{});
      if(typeof syncProfileNow==='function')Promise.resolve(syncProfileNow(true)).catch(()=>{});
      if(typeof renderHome==='function')renderHome();
      if(typeof renderProfile==='function')renderProfile();
    }catch(e){console.warn(BUILD,'apply shared profile',e)}
  }
  async function saveProfessionalProfile(){
    const name=String($('ithProName383').value||'').trim(),mode=String($('ithProMode383').value||'professional'),btn=$('ithProSave383');btn.disabled=true;btn.textContent='Αποθήκευση…';
    try{
      const st=await api('/api/account/v249383/professional/profile/update',{session_token:proToken,account_name:name,avatar:proAvatarDraft,account_mode:mode});
      accountStatus=st;applySharedProfile(st.account_name||name,st.avatar||proAvatarDraft);note(st.note||'Αποθηκεύτηκε.');renderProfessional(st)
    }catch(e){note(e.message||e,7000);btn.disabled=false;btn.textContent='Αποθήκευση κοινού προφίλ'}
  }
  async function leaveToNormal(){
    try{
      const st=await api('/api/account/v249383/mode',{session_token:proToken,account_mode:'normal'});accountStatus=st;
      await closeAccountModal();note('Ο λογαριασμός επέστρεψε σε κανονική λειτουργία.');setTimeout(appendProfilePanel,100)
    }catch(e){note(e.message||e)}
  }
  async function changePassword(){
    const p1=String($('ithNewPass383').value||''),p2=String($('ithNewPass2383').value||'');
    const passwordCheck=validateProfessionalPasswordPair386(p1,p2);
    if(!passwordCheck.ok){note(passwordCheck.note,7000);updatePasswordMatch386('ithNewPass383','ithNewPass2383','ithNewPassStatus386');return}
    const btn=$('ithChangePass383');btn.disabled=true;btn.textContent='Αλλαγή…';
    try{
      const d=await api('/api/account/v249383/professional/password/change',{session_token:proToken,new_password:p1,new_password_confirm:p2});note(d.note||'Ο κωδικός άλλαξε.',7000);proToken='';hideModal();setTimeout(openAccountCenter,500)
    }catch(e){note(e.message||e,7000);btn.disabled=false;btn.textContent='Αλλαγή κωδικού'}
  }
  async function syncCurrentProfile(force){
    if(!registered())return;
    const last=Number(localStorage.getItem('ith_account_sync_249383')||0);
    if(!force&&Date.now()-last<60000)return;
    try{
      const d=await api('/api/account/v249383/profile/sync',{account_name:accountName(),avatar:accountAvatar(),account_mode:'normal'});
      d.server_professional_enabled=!!d.professional_enabled;
      if(d.server_professional_enabled)setProfessionalSticky386(true);
      if(!d.server_professional_enabled&&professionalSticky386()){
        d.professional_enabled=true;
        d.professional_state_pending_server_confirmation=true;
      }
      accountStatus=d;accountStatusConfirmed386=true;lastStatusFetch386=Date.now();
      localStorage.setItem('ith_account_sync_249383',String(Date.now()));appendProfilePanel()
    }catch(e){console.warn(BUILD,'profile sync',e)}
  }
  function appendProfilePanel(){if(window.__ITHAKI_PROFILE_EXCLUSIVE_R10F37F1F3__){document.getElementById('ithAccountPanel383')?.remove();document.getElementById('ithProQuick384')?.remove();return}
    injectCss();ensureProfileQuickButton384();const page=$('profilePage');if(!page)return;
    const wrap=page.querySelector('.profileCleanWrap')||page;if(!wrap)return;
    let panel=$('ithAccountPanel383');if(!panel){panel=document.createElement('section');panel.id='ithAccountPanel383';panel.className='card profilePanelClean ithAccountPanel383 ithProfileProTop383'}
    if(panel.parentNode!==wrap||panel!==wrap.firstElementChild)wrap.insertBefore(panel,wrap.firstChild);
    const enabled=professionalSticky386()||!!(accountStatus&&accountStatus.professional_enabled);
    const checking=!enabled&&!accountStatusConfirmed386;
    const mode=(accountStatus&&accountStatus.account_mode)||'normal';
    const signature=[mode,enabled,checking,accountName(),accountAvatar()].join('|');
    if(panel.dataset.signature!==signature){
      panel.dataset.signature=signature;
      const badge=checking?'ΕΛΕΓΧΟΣ':enabled?'ΕΝΕΡΓΟ':'ΑΝΕΝΕΡΓΟ';
      const button=checking?'⏳ Έλεγχος επαγγελματικού κέντρου':enabled?'🔐 Είσοδος στο επαγγελματικό μενού':'🔐 Ενεργοποίηση επαγγελματικού κέντρου';
      const privacy=checking?'Γίνεται ασφαλής έλεγχος της υπάρχουσας ενεργοποίησης.':enabled?'Ο ίδιος κωδικός ζητείται σε κάθε είσοδο. Δεν υπάρχει ανάκτηση από τον server.':'Όρισε προσωπικό κωδικό και προαιρετικά αποθήκευσε ιδιωτικό αρχείο στο κινητό. Χωρίς email ή τηλέφωνο.';
      panel.innerHTML=`<div class="ithAccountHead383"><div><b>💼 Επαγγελματικό Κέντρο</b><div class="date">V405–V409 · Δημόσιο link · χωρίς επεξεργασία/επαφές</div></div><span class="badge">${badge}</span></div><button id="ithOpenProfessional383" class="ithProfileProButton383" type="button" ${checking?'disabled':''}>${button}</button><div class="ithAccountPrivacy383">${privacy}</div>`;
      if(!checking)$('ithOpenProfessional383').onclick=openAccountCenter;
    }
    renderActivationNotice384(wrap);
    if(profileVisible384()&&(!accountStatusConfirmed386||Date.now()-lastStatusFetch386>12000))setTimeout(()=>refreshPanelStatus384(false),120);
  }
  function installProfileHooks(){
    ensureProfileQuickButton384();
    const schedule=()=>{clearTimeout(syncTimer);syncTimer=setTimeout(()=>{appendProfilePanel();if(profileVisible384()&&Date.now()-lastStatusFetch386>12000)refreshPanelStatus384(false)},120)};
    if(profileObserver384)try{profileObserver384.disconnect()}catch(e){}
    profileObserver384=new MutationObserver(schedule);
    profileObserver384.observe(document.body,{attributes:true,attributeFilter:['class','data-page']});
    window.addEventListener('popstate',schedule);window.addEventListener('hashchange',schedule);
    document.addEventListener('click',e=>{const target=e.target&&e.target.closest?e.target.closest('[data-page="profile"],[data-target="profile"],button,a'):null;if(target)schedule()},true);
    clearInterval(profileHeartbeat384);profileHeartbeat384=setInterval(()=>{if(profileVisible384()){appendProfilePanel();if(Date.now()-lastStatusFetch386>15000)refreshPanelStatus384(false)}},5000);
    if(professionalSticky386())accountStatus={professional_enabled:true,account_mode:'normal',account_name:accountName(),avatar:accountAvatar(),local_professional_memory:true};
    appendProfilePanel();setTimeout(()=>refreshPanelStatus384(true),180);
    if(window.ITH&&typeof ITH.saveProfile==='function'&&!ITH.saveProfile.__v249386){
      const base=ITH.saveProfile;const wrapped=function(){const out=base.apply(this,arguments);setTimeout(()=>syncCurrentProfile(true),500);setTimeout(appendProfilePanel,650);return out};wrapped.__v249386=1;ITH.saveProfile=wrapped
    }
  }
  function normalCommunicationDeviceCandidates413(){
    const s=appState();const value=String((s&&s.device)||localStorage.getItem('ith_device')||localStorage.getItem('device_id')||'').trim();
    return value?[value]:[]
  }
  function previewObj(){try{return typeof state!=='undefined'&&state.preview?state.preview:null}catch(e){return null}}
  function injectPreviewChoice(){return false /* V249409: one unified preview; no second professional preview choice */}

  function setPreviewChoice(value){
    previewChoice=value==='studio'?'studio':'original';const p=previewObj();if(p)p.__delivery383=previewChoice;
    $('ithOriginalChoice383')?.classList.toggle('active',previewChoice==='original');$('ithStudioChoice383')?.classList.toggle('active',previewChoice==='studio');
    const s=$('ithStudioState383');if(s)s.textContent=previewChoice==='studio'?(studioReady?'Studio έτοιμο: θα σταλεί το επεξεργασμένο αρχείο.':'Άνοιξε το Studio και πάτησε «Εφαρμογή/Render» πριν την αποστολή.'):'Επιλεγμένο: πρωτότυπο αρχείο.';
    if(previewChoice==='studio'&&!studioReady&&window.ITH&&typeof ITH.openPreviewStudio==='function'&&!String($('previewStudioMount')?.innerHTML||'').trim())ITH.openPreviewStudio()
  }
  function markStudioReady(){
    const p=previewObj();if(!p)return;const f=p.file,o=p.originalFile;studioReady=!!(f&&o&&f!==o)||/_ithaki_studio/i.test(String(f&&f.name||''));p.__studioReady383=studioReady;
    if(studioReady)setPreviewChoice('studio');else{const s=$('ithStudioState383');if(s)s.textContent='Η επεξεργασία δεν δημιούργησε ακόμη νέο αρχείο.'}
  }
  function wrapStudioAndSend(){return false /* V249409: do not wrap sendPreview repeatedly */}

  function exports(){
    window.ITH=window.ITH||{};
    Object.assign(window.ITH,{openUnifiedAccountV249383:openAccountCenter,openProfessionalCenterV249383:openAccountCenter,openUnifiedAccountV249384:openAccountCenter,openProfessionalCenterV249384:openAccountCenter,openUnifiedAccountV249386:openAccountCenter,openProfessionalCenterV249386:openAccountCenter,closeUnifiedAccountV249384:closeAccountModal,closeUnifiedAccountV249386:closeAccountModal,syncUnifiedAccountV249384:syncCurrentProfile,syncUnifiedAccountV249386:syncCurrentProfile,isRegisteredMemberV249384:registered,isRegisteredMemberV249386:registered,saveProfessionalCredentialFileV249384:saveProfessionalCredentialFile384,saveProfessionalCredentialFileV249386:saveProfessionalCredentialFile384,professionalEnabledMemoryV249386:professionalSticky386,accountDeviceCandidatesV249386:normalCommunicationDeviceCandidates413,getProfessionalSessionTokenV249387:()=>proToken,getProfessionalAccountDeviceV249387:()=>device(),validateProfessionalSessionV249392:validateProfessionalSession383,openProfessionalCenterFastV249392:openAccountCenter,hideProfessionalMenuForToolV249392:hideModal})
  }
  function install(){
    if(installed)return;installed=true;injectCss();ensureModal();installProfileHooks();wrapStudioAndSend();exports();syncCurrentProfile(false);document.documentElement.setAttribute('data-ithaki-account-build',BUILD);document.documentElement.setAttribute('data-ithaki-professional-center','v249414-isolated-no-publishing');document.documentElement.setAttribute('data-ithaki-professional-code-check','min-8-and-confirmation')
  }
  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',install,{once:true});else install();
})();
