/* OK ITHAKI V249526R10F26 — SINGLE POLICY / SINGLE ACCOUNT SAVE / EXCLUSIVE SCREENS */
(function(){
'use strict';
if(window.__ITHAKI_V249526R10F26_OWNER__)return;
window.__ITHAKI_V249526R10F26_OWNER__={version:'V249526R10F26',singlePolicy:true,singleDetails:true,saveGuard:true,exclusiveScreens:true,android:249550,at:Date.now()};
window.SINGLE_POLICY_OWNER_R10F26=true;
window.SINGLE_ACCOUNT_SAVE_WARNING_R10F26=true;
window.EXCLUSIVE_PRIMARY_PAGE_OWNER_R10F26=true;
window.FEED_BACKGROUND_ONLY_WHEN_OVERLAY_R10F26=true;
const ADMIN_NAME='ΚΑΡΑΤΖΑΣ ΒΑΣΙΛΕΙΟΣ';
const CONTACT_EMAIL='okithaki@gmail.com';
const POLICY_VERSION='249526r10f26';
const I=()=>window.ITH=window.ITH||{};
const S=()=>window.state||I().state||{};
const $=id=>document.getElementById(id);
const esc=s=>String(s==null?'':s).replace(/[&<>"']/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
const isEn=()=>{try{return String(localStorage.getItem('ith_global_language_r10f7')||localStorage.getItem('ith_ui_lang_v249141')||localStorage.getItem('ith_ui_lang')||document.documentElement.lang||'el').toLowerCase().startsWith('en')}catch(_e){return false}};
const tr=(el,en)=>isEn()?en:el;
const bridge=()=>window.OKITHAKI_ANDROID||window.AndroidBridge||null;
let allowSaveOnce=false,lastFile=null,lastFilename='',lastPath='',pageWrapped=null,maintainTimer=0;
function toast(m,ms=6500){try{if(typeof I().toast==='function')return I().toast(String(m),ms)}catch(_e){}const t=$('toast');if(t){t.textContent=String(m);t.classList.add('show');setTimeout(()=>t.classList.remove('show'),ms)}else alert(String(m))}
function safeName(v){return String(v||'Member').normalize('NFKD').replace(/[^\p{L}\p{N}._-]+/gu,'_').replace(/^_+|_+$/g,'').slice(0,60)||'Member'}
function stamp(){return new Date().toISOString().replace(/[:.]/g,'-')}
function base64Utf8(s){try{return btoa(unescape(encodeURIComponent(String(s||''))))}catch(_e){return btoa(String(s||''))}}
async function digest(text){try{if(window.crypto&&crypto.subtle){const a=await crypto.subtle.digest('SHA-256',new TextEncoder().encode(text));return Array.from(new Uint8Array(a)).map(x=>x.toString(16).padStart(2,'0')).join('')}}catch(_e){}let h=2166136261;for(let i=0;i<text.length;i++){h^=text.charCodeAt(i);h=Math.imul(h,16777619)}return('00000000'+(h>>>0).toString(16)).slice(-8)}
const PROFILE_KEYS=['ith_device','ith_device_id','ith_room','ith_name','ith_avatar','ith_animal','ith_age16','ith_policy_ok','ith_policy_accepted_version','ith_policy_accepted_at','ith_registered_member_v249154','ith_profile_name_locked_v249164','ith_global_language_r10f7','ith_ui_lang_v249141','ith_ui_lang','ith_profile_country_r10f7','ith_profile_birth_year_r10f7','ith_profile_interests_r10f7','ith_profile_bio_r10f7','ith_auto_translate_content_r10f8','ith_professional_enabled_v249386'];
function localProfile(){const o={};for(const k of PROFILE_KEYS){try{const v=localStorage.getItem(k);if(v!==null&&v!=='')o[k]=v}catch(_e){}}return o}
async function accountPayload(){const local=localProfile(),st=S(),base={format:'OK_ITHAKI_PRIVATE_ACCOUNT_FILE',version:'V249526R10F26',created_at:new Date().toISOString(),controller:{name:ADMIN_NAME,contact_email:CONTACT_EMAIL},identity:{device_id:String(st.device||local.ith_device||local.ith_device_id||''),room_id:String(st.room||local.ith_room||'ithaki-phone-test'),nickname:String(st.name||local.ith_name||'Member')},profile:{country:local.ith_profile_country_r10f7||'',birth_year:local.ith_profile_birth_year_r10f7||'',interests:local.ith_profile_interests_r10f7||'',bio:local.ith_profile_bio_r10f7||'',avatar:local.ith_avatar||'',animal:local.ith_animal||''},settings:{language:local.ith_global_language_r10f7||local.ith_ui_lang_v249141||'el',age16_confirmed:local.ith_age16==='1',policy_accepted:local.ith_policy_ok==='1',policy_version:local.ith_policy_accepted_version||''},local_storage:local,excluded:['plain passwords','professional passwords','session tokens','FCM tokens','administrator secrets','notification sync secrets']};base.integrity={algorithm:'SHA-256-or-local-fallback',digest:await digest(JSON.stringify(base))};return base}
function folderInfo(){const b=bridge();let selected='',profile='';try{if(b&&typeof b.getRecoveryFolderUri==='function')selected=String(b.getRecoveryFolderUri()||'')}catch(_e){}try{if(b&&typeof b.getProfileFolder==='function')profile=String(b.getProfileFolder()||'')}catch(_e){}if(selected)return{label:tr('Επιλεγμένος φάκελος Android','Selected Android folder'),path:selected};if(profile)return{label:tr('Φάκελος εφαρμογής','App folder'),path:profile.replace(/[\\/]+$/,'')+'/memories'};return{label:tr('Λήψεις / Downloads','Downloads'),path:tr('Λήψεις / Downloads — ο browser επιλέγει την ακριβή διαδρομή','Downloads — the browser controls the exact path')}}
function browserDownload(blob,name){const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download=name;document.body.appendChild(a);a.click();setTimeout(()=>{URL.revokeObjectURL(a.href);a.remove()},1800);return'Downloads/'+name}
async function exportAccountFile(){const payload=await accountPayload(),json=JSON.stringify(payload,null,2),name='OK_ITHAKI_ACCOUNT_'+safeName(payload.identity.nickname)+'_'+stamp()+'.json',blob=new Blob([json],{type:'application/json;charset=utf-8'}),b=bridge();let path='';try{if(b&&typeof b.setProfileFolder==='function')b.setProfileFolder(payload.identity.nickname)}catch(_e){}try{if(b&&typeof b.exportRecoverySnapshot==='function')path=String(b.exportRecoverySnapshot(name,json)||'')}catch(_e){path=''}try{if((!path||/^(error:|NO_|CREATE_FAILED|OPEN_FAILED)/i.test(path))&&b&&typeof b.saveBase64ToProfile==='function')path=String(b.saveBase64ToProfile('account',name,'application/json',base64Utf8(json))||'')}catch(_e){path=''}if(!path||/^(error:|NO_|CREATE_FAILED|OPEN_FAILED)/i.test(path))path=browserDownload(blob,name);lastFile=blob;lastFilename=name;lastPath=path;try{localStorage.setItem('ith_account_file_last_r10f26',JSON.stringify({path,filename:name,saved_at:Date.now(),digest:payload.integrity.digest}))}catch(_e){}return{ok:true,path,filename:name}}
async function shareAccountFile(){try{if(!lastFile)await exportAccountFile();const f=new File([lastFile],lastFilename,{type:'application/json'});if(navigator.share&&(!navigator.canShare||navigator.canShare({files:[f]}))){await navigator.share({files:[f],title:'OK ITHAKI account file',text:tr('Ιδιωτικό αρχείο λογαριασμού.','Private account file.')});return false}browserDownload(lastFile,lastFilename);toast(tr('Το αρχείο αποθηκεύτηκε στις Λήψεις.','The file was saved to Downloads.'))}catch(e){if(e&&e.name!=='AbortError')toast(String(e.message||e),8000)}return false}
function chooseFolder(){const b=bridge();try{if(b&&typeof b.chooseRecoveryFolder==='function'){b.chooseRecoveryFolder();return false}}catch(_e){}toast(tr('Στον browser το αρχείο αποθηκεύεται στις Λήψεις.','In the browser the file is saved to Downloads.'));return false}
function closeNode(id){const x=$(id);if(!x)return;if(id==='memberMenu'){try{I().closeMember&&I().closeMember()}catch(_e){}x.classList.remove('show','localPanel','legalPanel','fullAvatarMenuV249231');x.innerHTML='';return}if(id==='plusSheet'||id==='previewModal'){x.classList.remove('show');if(id==='previewModal')x.innerHTML='';return}x.remove()}
const TRANSIENT_IDS=['ithR10F26SaveModal','ithR10F9Profile','ith537FullProfileModal','ith537LanguageModal','notifySettingsV249258','ith526NotificationCenter','ith525NotificationCenter','commOverlayV249280','groupModalV249282','ithProCenterV249477','bottleSeaOverlayV249274','lighthouseOverlayV249278','lighthouseMenuV249279','guideOverlayV249271','guideOverlayV249272','guideOverlayV249275','ithAccountModal383','ithUnifiedAccountV249383','ithShareOverlayV249433','ithFeedSearchPanelV249429','ithDiagPanelV249429','ithExternalCenterHomeV249483'];
function closeTransientScreens(except=''){if(except!=='plus')closeNode('plusSheet');if(except!=='member')closeNode('memberMenu');if(except!=='preview')closeNode('previewModal');for(const id of TRANSIENT_IDS){if(id!==except)closeNode(id)}document.body?.classList.remove('ithR10F26OverlayOpen');singlePrimaryPage();return false}
function singlePrimaryPage(preferred=''){const pages=[...document.querySelectorAll('.page')];if(!pages.length)return;let id=String(preferred||document.body?.dataset.page||S().page||'home');let keep=$(id+'Page');if(!keep||!keep.classList.contains('page'))keep=pages.find(x=>x.classList.contains('active'))||$('homePage')||pages[0];pages.forEach(x=>x.classList.toggle('active',x===keep));id=String(keep.id||'homePage').replace(/Page$/,'');if(document.body)document.body.dataset.page=id;const st=S();if(st)st.page=id;document.querySelectorAll('#nav button[data-page]').forEach(b=>b.classList.toggle('active',b.dataset.page===id))}
function setOverlayBackground(){singlePrimaryPage();document.body?.classList.add('ithR10F26OverlayOpen');try{I().stopAllMedia&&I().stopAllMedia()}catch(_e){}}
function openInMember(html,cls=''){closeTransientScreens('member');const m=$('memberMenu');if(!m)return null;m.className='memberMenu show fullAvatarMenuV249231 '+cls;m.innerHTML=html;setOverlayBackground();return m}
function detailsBody(el=true){return`<section class="ithR10F26Card"><h3>${el?'Υπεύθυνος λειτουργίας':'Service controller'}</h3><div class="ithR10F26Line"><span>${el?'Διαχειριστής':'Administrator'}</span><b>${ADMIN_NAME}</b></div><div class="ithR10F26Line"><span>${el?'Επικοινωνία':'Contact'}</span><a href="mailto:${CONTACT_EMAIL}">${CONTACT_EMAIL}</a></div><p>${el?'Για αιτήματα πρόσβασης, διόρθωσης ή διαγραφής δεδομένων χρησιμοποίησε το email ή τον μηχανισμό διαγραφής λογαριασμού.':'For access, correction or deletion requests, use the email or the account-deletion mechanism.'}</p></section>`}
function policyBody(tab,el){if(tab==='details')return detailsBody(el);if(tab==='terms')return`<section class="ithR10F26Card"><h3>${el?'Όροι Χρήσης':'Terms of Service'}</h3><p>${el?'Η υπηρεσία προορίζεται για χρήστες 16+, με σεβασμό, χωρίς απειλές, απάτες, παρενόχληση, εκμετάλλευση, παράνομο σεξουαλικό υλικό ή άλλο παράνομο περιεχόμενο.':'The service is for users aged 16+, with respectful use and no threats, scams, harassment, exploitation, illegal sexual material or other illegal content.'}</p><p>${el?'Οι αναφορές, οι περιορισμοί και η ανθρώπινη διαχείριση χρησιμοποιούνται για την προστασία της κοινότητας.':'Reports, restrictions and human moderation protect the community.'}</p></section>`;if(tab==='security')return`<section class="ithR10F26Card"><h3>${el?'Τεχνικές απαιτήσεις':'Technical requirements'}</h3><ul><li>HTTPS / SSL-TLS</li><li>Firewall</li><li>${el?'Κρυπτογραφημένα και δοκιμασμένα backups':'Encrypted and tested backups'}</li><li>Cookie banner</li><li>Privacy Policy</li><li>Terms of Service</li><li>${el?'Μηχανισμός διαγραφής λογαριασμού':'Account deletion mechanism'}</li><li>${el?'Hosting με τεχνικά και συμβατικά μέτρα GDPR':'Hosting with technical and contractual GDPR measures'}</li></ul><p>${el?'Η εμφάνιση αυτών των απαιτήσεων δεν αποτελεί αυτόματη νομική πιστοποίηση.':'Displaying these requirements is not automatic legal certification.'}</p></section>`;if(tab==='cookies')return`<section class="ithR10F26Card"><h3>Cookies</h3><p>${el?'Η απαραίτητη τοπική αποθήκευση χρησιμοποιείται για γλώσσα, προφίλ και λειτουργία. Μη απαραίτητα cookies, analytics ή trackers χρειάζονται προηγούμενη επιλογή.':'Necessary local storage supports language, profile and operation. Non-essential cookies, analytics or trackers require prior choice.'}</p></section>`;return`<section class="ithR10F26Card"><h3>Privacy Policy</h3><p>${el?'Η OK ITHAKI λειτουργεί με ψευδώνυμο και δεν απαιτεί υποχρεωτικά email ή τηλέφωνο για τον λογαριασμό. Εφαρμόζονται ελαχιστοποίηση δεδομένων, περιορισμός σκοπού, έλεγχος πρόσβασης και δικαιώματα πρόσβασης, διόρθωσης και διαγραφής.':'OK ITHAKI uses pseudonyms and does not require mandatory email or phone for the account. Data minimisation, purpose limitation, access control and access, correction and deletion rights apply.'}</p><p>${el?'Οι έλεγχοι αρχείων γίνονται στην Προεπισκόπηση και κατά το upload στον server, όχι κατά το απλό φόρτωμα της Ροής.':'File checks run in Preview and during server upload, not during normal Feed loading.'}</p></section>`}
function openPolicy(tab='privacy',lang){const el=(lang||tr('el','en'))!=='en';closeTransientScreens('member');const m=openInMember(`<div class="ithR10F26Policy"><header><button data-r10f26-close>‹</button><div><b>⚖️ OK ITHAKI</b><small>${el?'Πολιτική και στοιχεία':'Policy and details'}</small></div><button data-r10f26-close>×</button></header><nav><button data-r10f26-tab="privacy">Privacy Policy</button><button data-r10f26-tab="terms">Terms</button><button data-r10f26-tab="security">${el?'Ασφάλεια':'Security'}</button><button data-r10f26-tab="cookies">Cookies</button><button data-r10f26-tab="details">🪪 ${el?'Στοιχεία μου':'My details'}</button><button data-r10f26-lang="${el?'en':'el'}">${el?'EN':'EL'}</button></nav><main>${policyBody(tab,el)}</main><footer><button data-r10f26-accept>✓ ${el?'Αποδοχή':'Accept'}</button><button class="danger" data-r10f26-delete>🗑️ ${el?'Διαγραφή λογαριασμού':'Delete account'}</button><button data-r10f26-close>${el?'Κλείσιμο':'Close'}</button></footer></div>`,'ithR10F26PolicyHost');if(!m)return false;m.querySelectorAll('[data-r10f26-tab]').forEach(b=>{b.classList.toggle('active',b.dataset.r10f26Tab===tab);b.onclick=()=>openPolicy(b.dataset.r10f26Tab,el?'el':'en')});m.querySelectorAll('[data-r10f26-close]').forEach(b=>b.onclick=()=>closeTransientScreens());m.querySelector('[data-r10f26-lang]').onclick=()=>openPolicy(tab,el?'en':'el');m.querySelector('[data-r10f26-accept]').onclick=()=>{try{localStorage.setItem('ith_policy_ok','1');localStorage.setItem('ith_policy_accepted_version',POLICY_VERSION);localStorage.setItem('ith_policy_accepted_at',new Date().toISOString())}catch(_e){}const st=S();st.policyOk=true;toast(el?'Η πολιτική αποθηκεύτηκε.':'Policy accepted.');closeTransientScreens()};m.querySelector('[data-r10f26-delete]').onclick=deleteAccount;return false}
async function deleteAccount(){if(!confirm(tr('Να διαγραφούν τα δεδομένα λογαριασμού από αυτή τη συσκευή και να σταλεί αίτημα στον server;','Delete account data from this device and send a server request?')))return false;const f=I().deleteAccountData;if(typeof f==='function')return f();toast(tr('Ο μηχανισμός διαγραφής δεν βρέθηκε.','Deletion mechanism was not found.'));return false}
function openAccountPanel(){const f=folderInfo(),last=(()=>{try{return JSON.parse(localStorage.getItem('ith_account_file_last_r10f26')||'null')}catch(_e){return null}})(),path=lastPath||(last&&last.path)||f.path;const m=openInMember(`<div class="ithR10F26Policy"><header><button data-r10f26-close>‹</button><div><b>💾 ${tr('Αρχείο λογαριασμού','Account file')}</b><small>OK ITHAKI V249526R10F26</small></div><button data-r10f26-close>×</button></header><main><section class="ithR10F26Card"><h3>📍 ${tr('Φάκελος αποθήκευσης','Storage folder')}</h3><code>${esc(path)}</code><p>${tr('Κράτησε το αρχείο σε USB και σε δεύτερο ασφαλές σημείο.','Keep the file on USB and in a second secure place.')}</p><div class="ithR10F26Buttons"><button data-r10f26-folder>📁 ${tr('Επιλογή φακέλου','Choose folder')}</button><button data-r10f26-export>💾 ${tr('Νέο αρχείο','New file')}</button><button data-r10f26-share>↗ Email / Viber / cloud</button></div></section></main></div>`);if(!m)return false;m.querySelectorAll('[data-r10f26-close]').forEach(b=>b.onclick=()=>closeTransientScreens());m.querySelector('[data-r10f26-folder]').onclick=chooseFolder;m.querySelector('[data-r10f26-export]').onclick=async()=>{const r=await exportAccountFile();m.querySelector('code').textContent=r.path;toast(tr('Το αρχείο δημιουργήθηκε.','File created.'))};m.querySelector('[data-r10f26-share]').onclick=shareAccountFile;return false}
function openNotificationSettings(){closeTransientScreens('member');const f=I().openNotificationSettingsV249238||window.openNotificationSettingsV249238;if(typeof f==='function'){f.call(I());setOverlayBackground();return false}const c=I().notifyCenter||window.notifyCenter;if(typeof c==='function'){c.call(I());setOverlayBackground();return false}toast(tr('Οι ρυθμίσεις ειδοποιήσεων δεν άνοιξαν.','Notification settings did not open.'));return false}
function whyCard(icon,title,text){return`<article class="ithR10F26WhyCard"><h3>${icon} ${esc(title)}</h3><p>${esc(text)}</p></article>`}
function openWhy(){const el=!isEn(),cards=el?[
['📡','Mesh χωρίς internet','Χειροκίνητη τοπική επικοινωνία με κάθε κινητό ως μικρό server για γραπτά μηνύματα και SOS μέσω hotspot, ίδιου Wi‑Fi ή υποστηριζόμενου Wi‑Fi Direct, με ασφαλή επιστροφή στην κανονική σύνδεση.'],
['🔔','Ειδοποιήσεις και ΒΙΛ','Ο ΒΙΛ ανοίγει τις ρυθμίσεις του καμπανακιού. Με ρητή άδεια Android μπορούν να οργανώνονται ειδοποιήσεις email, Viber και άλλων εφαρμογών με τύπο, ώρα και ημερολόγιο.'],
['🤖','BotGuard, spam και κακόβουλα αρχεία','Rate limits, έλεγχος flood και επανάληψης, προσωρινοί περιορισμοί, έλεγχος πραγματικής υπογραφής αρχείων και antivirus όπου είναι διαθέσιμο. Ο έλεγχος γίνεται στην Προεπισκόπηση και στο upload του server, όχι στο φόρτωμα της Ροής.'],
['🚨','Σεξουαλικό περιεχόμενο, βία και εγκληματικότητα','Αναφορές χρηστών, αυτοματοποιημένες ενδείξεις και ανθρώπινος έλεγχος για πιθανό παράνομο σεξουαλικό υλικό, εκμετάλλευση, βία, απειλές, απάτες, παρενόχληση και άλλο επικίνδυνο περιεχόμενο. Κανένα φίλτρο δεν εγγυάται 100% ανίχνευση.'],
['🔐','Privacy by design','Ψευδώνυμο, χωρίς υποχρεωτικό email ή τηλέφωνο, ελαχιστοποίηση δεδομένων, ορατή πολιτική, όροι, μηχανισμός διαγραφής και στοιχεία υπευθύνου μέσα στην Πολιτική.'],
['🛡️','Πραγματική υποδομή','HTTPS/SSL, firewall, κρυπτογραφημένα και δοκιμασμένα backups, cookie banner πριν από μη απαραίτητα cookies, Privacy Policy, Terms of Service και hosting με τεχνικά και συμβατικά μέτρα GDPR.']
]:[
['📡','Offline Mesh','Manual local communication with each phone acting as a small server for text and SOS over hotspot, same Wi‑Fi or supported Wi‑Fi Direct, with safe fallback to normal connectivity.'],
['🔔','Notifications and Bil','Bil opens bell settings. With explicit Android permission, email, Viber and other app notifications can be organised by type, time and calendar.'],
['🤖','BotGuard, spam and malicious files','Rate limits, flood and repetition checks, temporary restrictions, real file-signature checks and antivirus where available. Checks run in Preview and server upload, not during Feed loading.'],
['🚨','Sexual content, violence and crime','User reports, automated signals and human review address potentially illegal sexual material, exploitation, violence, threats, scams, harassment and other dangerous content. No filter guarantees 100% detection.'],
['🔐','Privacy by design','Pseudonyms, no mandatory email or phone, data minimisation, visible policy, Terms, deletion mechanism and controller details inside Policy.'],
['🛡️','Real infrastructure','HTTPS/SSL, firewall, encrypted and tested backups, cookie banner before non-essential cookies, Privacy Policy, Terms and hosting with technical and contractual GDPR measures.']
];const m=openInMember(`<div class="ithR10F26Policy ithR10F26Why"><header><button data-r10f26-close>‹</button><div><b>✨ ${el?'Γιατί OK ITHAKI':'Why OK ITHAKI'}</b><small>${el?'Ιδιωτικότητα, ασφάλεια και ανθεκτική επικοινωνία':'Privacy, safety and resilient communication'}</small></div><button data-r10f26-close>×</button></header><main><section class="ithR10F26Card"><h3>${el?'Η προστασία πρέπει να λειτουργεί στην πράξη':'Protection must work in practice'}</h3><p>${el?'Η εφαρμογή συνδυάζει ανθρώπινη επικοινωνία, offline δυνατότητες, ελάχιστα δεδομένα και ελέγχους που δεν μπλοκάρουν τη Ροή.':'The app combines human communication, offline capability, minimal data and checks that do not block the Feed.'}</p></section><div class="ithR10F26WhyGrid">${cards.map(x=>whyCard(...x)).join('')}</div><div class="ithR10F26Buttons"><button data-r10f26-policy>⚖️ ${el?'Πολιτική':'Policy'}</button></div></main></div>`);if(m)m.querySelectorAll('[data-r10f26-close]').forEach(b=>b.onclick=()=>closeTransientScreens());return false}
function ensureCookieBanner(){let choice='';try{choice=localStorage.getItem('ith_cookie_choice_r10f26')||''}catch(_e){}if(choice||$('ithR10F26Cookie'))return;const b=document.createElement('aside');b.id='ithR10F26Cookie';b.innerHTML=`<div><b>🍪 ${tr('Cookies και τοπική αποθήκευση','Cookies and local storage')}</b><p>${tr('Χρησιμοποιείται απαραίτητη τοπική αποθήκευση για γλώσσα, προφίλ, ασφάλεια και λειτουργία. Μη απαραίτητα cookies ή analytics δεν ενεργοποιούνται χωρίς επιλογή.','Necessary local storage supports language, profile, security and operation. Non-essential cookies or analytics are not enabled without a choice.')}</p></div><button data-r10f26-cookie-necessary>${tr('Μόνο απαραίτητα','Necessary only')}</button><button data-r10f26-policy>Privacy Policy</button>`;document.body.appendChild(b)}
function saveModalHtml(kind){const f=folderInfo();return`<section id="ithR10F26SaveModal"><div class="ithR10F26SaveCard"><header><b>💾 ${tr('Αποθήκευση προφίλ','Save profile')}</b><button data-r10f26-cancel>×</button></header><div class="ithR10F26Warn"><h3>⚠️ ${tr('Δεν υπάρχει ανάκτηση λογαριασμού από τον server','No server account recovery')}</h3><p>${tr('Για λόγους ασφάλειας ο server δεν κρατά email, τηλέφωνο ή μυστικό που να επαναφέρει την ίδια ταυτότητα. Αν χαθούν η συσκευή και το ιδιωτικό αρχείο, η ίδια ταυτότητα δεν επανέρχεται.','For security, the server keeps no email, phone or secret that restores the same identity. If both device and private file are lost, the same identity cannot be restored.')}</p><ol><li>${tr('Θα δημιουργηθεί ιδιωτικό αρχείο μαζί με την αποθήκευση.','A private file will be created with the save.')}</li><li>${tr('Αντέγραψέ το σε USB stick.','Copy it to a USB drive.')}</li><li>${tr('Κράτησε δεύτερο αντίγραφο σε υπολογιστή ή δικό σου προστατευμένο email/Viber/cloud.','Keep a second copy on a computer or your own protected email/Viber/cloud.')}</li></ol><div class="ithR10F26Path"><small>${esc(f.label)}</small><code>${esc(f.path)}</code></div></div><label class="ithR10F26Confirm"><input type="checkbox" data-r10f26-confirm><span>${tr('Κατάλαβα και θα κρατήσω δύο ασφαλή αντίγραφα.','I understand and will keep two secure copies.')}</span></label><div class="ithR10F26Buttons"><button data-r10f26-folder>📁 ${tr('Επιλογή φακέλου','Choose folder')}</button><button class="green" data-r10f26-save>💾 ${tr('Αποθήκευση προφίλ και αρχείου','Save profile and file')}</button><button data-r10f26-cancel>${tr('Άκυρο','Cancel')}</button></div><div data-r10f26-status></div></div></section>`}
function openSaveGuard(button,kind){closeTransientScreens('ithR10F26SaveModal');document.body.insertAdjacentHTML('beforeend',saveModalHtml(kind));setOverlayBackground();const modal=$('ithR10F26SaveModal'),status=modal.querySelector('[data-r10f26-status]');modal.querySelectorAll('[data-r10f26-cancel]').forEach(b=>b.onclick=()=>{modal.remove();document.body?.classList.remove('ithR10F26OverlayOpen')});modal.querySelector('[data-r10f26-folder]').onclick=chooseFolder;modal.querySelector('[data-r10f26-save]').onclick=async()=>{if(!modal.querySelector('[data-r10f26-confirm]').checked){status.textContent=tr('Χρειάζεται επιβεβαίωση.','Confirmation is required.');return}status.textContent=tr('Αποθήκευση…','Saving…');allowSaveOnce=true;try{button.click()}catch(_e){allowSaveOnce=false}setTimeout(async()=>{try{const ok=localStorage.getItem('ith_age16')==='1'&&localStorage.getItem('ith_policy_ok')==='1';if(!ok){status.textContent=tr('Το προφίλ δεν αποθηκεύτηκε. Έλεγξε ηλικία και αποδοχή πολιτικής.','Profile was not saved. Check age and policy acceptance.');return}localStorage.setItem('ith_policy_accepted_version',POLICY_VERSION);const r=await exportAccountFile();status.innerHTML=`<b>✅ ${tr('Αποθηκεύτηκε','Saved')}</b><div class="ithR10F26Path"><code>${esc(r.path)}</code></div><div class="ithR10F26Buttons"><button data-r10f26-share-result>↗ Email / Viber / cloud</button><button data-r10f26-done>${tr('Κλείσιμο','Close')}</button></div>`;status.querySelector('[data-r10f26-share-result]').onclick=shareAccountFile;status.querySelector('[data-r10f26-done]').onclick=()=>{modal.remove();document.body?.classList.remove('ithR10F26OverlayOpen')}}catch(e){status.textContent=tr('Σφάλμα αρχείου: ','File error: ')+String(e.message||e)}},850)};return false}
function cleanProfileDuplicates(){document.querySelectorAll('#ithR10F24MainWarning,#ithR10F24MyDetails,#ithR10F25MainWarning,#ithR10F25MyDetails,#ithR10F24OverlayWarning,#ithR10F24OverlayDetails,#ithR10F25OverlayWarning,#ithR10F25OverlayDetails').forEach(x=>x.remove());const page=$('profilePage');if(page){const safety=[...page.querySelectorAll('button[onclick*="openLegalPolicy"]')];safety.slice(1).forEach(x=>x.remove());const backup=page.querySelector('button[onclick*="ITH.backup"]');if(backup){backup.removeAttribute('onclick');backup.dataset.r10f26Account='1';backup.innerHTML='<b>💾</b>'+tr('Αρχείο λογαριασμού','Account file')}const restore=page.querySelector('button[onclick*="ITH.restore"]');if(restore)restore.remove()}const p=$('ithR10F9Profile');if(p){p.querySelector('.ithR10F9Security')?.remove();p.querySelector('[data-import]')?.remove();p.querySelector('[data-export]')?.remove();const terms=p.querySelector('[data-terms]');if(terms)terms.textContent='⚖️ '+tr('Πολιτική','Policy')}}
function wrapPage(){const cur=I().page;if(typeof cur!=='function'||cur.__r10f26||pageWrapped===cur)return;const old=cur;const w=function(id){closeTransientScreens();const r=old.apply(this,arguments);setTimeout(()=>singlePrimaryPage(String(id||'')),30);return r};w.__r10f26=true;w.__original=old;I().page=w;pageWrapped=w}
function capture(e){const bil=e.target.closest&&e.target.closest('#ith526BilDock,#ith525BilDock,#ithBilStableV249475,#athinaFabV249258,[data-ithaki-bil]');if(bil){e.preventDefault();e.stopImmediatePropagation();return openNotificationSettings()}const why=e.target.closest&&e.target.closest('[data-v249461-action="why"],.ithHomeWhyBtnV249264,[onclick*="openWhyIthakiV249262"],[data-r10f26-why]');if(why){e.preventDefault();e.stopImmediatePropagation();return openWhy()}const save=e.target.closest&&e.target.closest('#profilePage .saveProfileRow button,#ithR10F9Profile [data-save-profile]');if(save){if(allowSaveOnce){allowSaveOnce=false;return}e.preventDefault();e.stopImmediatePropagation();return openSaveGuard(save,save.closest('#ithR10F9Profile')?'overlay':'main')}const account=e.target.closest&&e.target.closest('[data-r10f26-account]');if(account){e.preventDefault();e.stopImmediatePropagation();return openAccountPanel()}const cookie=e.target.closest&&e.target.closest('[data-r10f26-cookie-necessary]');if(cookie){e.preventDefault();try{localStorage.setItem('ith_cookie_choice_r10f26','necessary')}catch(_e){}$('ithR10F26Cookie')?.remove();return false}const nav=e.target.closest&&e.target.closest('#nav button[data-page]');if(nav){if(nav.dataset.page==='plus'){closeTransientScreens('plus');singlePrimaryPage();setTimeout(()=>{if($('plusSheet')?.classList.contains('show'))setOverlayBackground()},30)}else closeTransientScreens();return}const policy=e.target.closest&&e.target.closest('[onclick*="openLegalPolicy"],[data-r10f26-policy]');if(policy){e.preventDefault();e.stopImmediatePropagation();return openPolicy('privacy')}const plusOpen=e.target.closest&&e.target.closest('#plusSheet.show');if(plusOpen){singlePrimaryPage();return}}
function observe(){new MutationObserver(()=>{clearTimeout(maintainTimer);maintainTimer=setTimeout(()=>{cleanProfileDuplicates();wrapPage();singlePrimaryPage();const overlays=TRANSIENT_IDS.some(id=>!!$(id))||$('memberMenu')?.classList.contains('show')||$('plusSheet')?.classList.contains('show');if(overlays)setOverlayBackground()},55)}).observe(document.documentElement,{subtree:true,childList:true,attributes:true,attributeFilter:['class']})}
function css(){if($('ithR10F26Css'))return;const s=document.createElement('style');s.id='ithR10F26Css';s.textContent=`body.ithR10F26OverlayOpen .page.active{pointer-events:none}.ithR10F26Policy{height:100%;overflow:auto;padding:10px 10px calc(var(--bar,72px) + 28px);background:#071522;color:#fff}.ithR10F26Policy header{position:sticky;top:0;z-index:5;display:grid;grid-template-columns:auto 1fr auto;gap:9px;align-items:center;padding:11px;border-radius:18px;background:#071522f5;border:1px solid #ffffff1a}.ithR10F26Policy header div{display:grid}.ithR10F26Policy header small{color:#adc0ce}.ithR10F26Policy nav{display:flex;gap:7px;overflow:auto;padding:10px 0}.ithR10F26Policy nav button{white-space:nowrap}.ithR10F26Policy nav .active{border-color:#ffe09a;background:#ffe09a22}.ithR10F26Policy main{display:grid;gap:10px}.ithR10F26Policy footer,.ithR10F26Buttons{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.ithR10F26Policy footer .danger,.ithR10F26Buttons .danger{border-color:#ff7272}.ithR10F26Policy footer .green,.ithR10F26Buttons .green{border-color:#36f0a0;background:#36f0a01b}.ithR10F26Card{padding:15px;border-radius:20px;border:1px solid #ffffff18;background:#ffffff09}.ithR10F26Card h3{margin:0 0 9px;color:#ffe09a}.ithR10F26Card p,.ithR10F26Card li{line-height:1.55}.ithR10F26Card a{color:#7bdcff}.ithR10F26Card code{display:block;overflow-wrap:anywhere;color:#bfe9ff}.ithR10F26Line{display:grid;grid-template-columns:minmax(140px,.8fr) 1fr;gap:9px;padding:9px 0;border-bottom:1px solid #ffffff14}.ithR10F26Line span{color:#adc0ce}#ithR10F26SaveModal{position:fixed;inset:0;z-index:2147483646;display:grid;place-items:center;padding:12px;background:#000b;backdrop-filter:blur(12px)}.ithR10F26SaveCard{width:min(720px,100%);max-height:94dvh;overflow:auto;padding:15px;border-radius:25px;border:1px solid #ffd36e55;background:linear-gradient(155deg,#071522,#102a3f);color:#fff;box-shadow:0 30px 90px #000b}.ithR10F26SaveCard header{display:flex;align-items:center;justify-content:space-between}.ithR10F26SaveCard header button{width:42px;height:42px;border-radius:50%}.ithR10F26Warn{margin-top:10px;padding:14px;border-radius:20px;border:1px solid #ffb15a70;background:#7d331d33}.ithR10F26Warn h3{margin:0 0 7px;color:#ffd59a}.ithR10F26Warn p,.ithR10F26Warn li{line-height:1.5}.ithR10F26Path{display:grid;gap:4px;padding:10px;border-radius:14px;background:#0005}.ithR10F26Path code{overflow-wrap:anywhere;color:#bfe9ff}.ithR10F26Confirm{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:12px;border-radius:16px;border:1px solid #ffd36e55;background:#ffd36e10}.ithR10F26Confirm input{width:23px;height:23px;flex:0 0 auto}.ithR10F26WhyGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:10px}.ithR10F26WhyCard{padding:14px;border-radius:19px;border:1px solid #ffffff18;background:#ffffff08}.ithR10F26WhyCard h3{margin:0 0 7px;color:#ffe09a}.ithR10F26WhyCard p{line-height:1.5}.ithR10F26Cookie{position:fixed;left:12px;right:12px;bottom:calc(var(--bar,72px) + 10px);z-index:2147483645;display:grid;grid-template-columns:1fr auto auto;gap:9px;align-items:center;padding:13px;border-radius:19px;border:1px solid #ffdc7855;background:#071522f7;color:#fff;box-shadow:0 20px 55px #0008}.ithR10F26Cookie p{margin:4px 0 0;color:#b7c7d1}.ithR10F26Cookie button{min-height:40px}@media(max-width:650px){.ithR10F26Line{grid-template-columns:1fr}.ithR10F26Buttons button,.ithR10F26Policy footer button{flex:1 1 100%}.ithR10F26WhyGrid{grid-template-columns:1fr}.ithR10F26Cookie{grid-template-columns:1fr}}`;document.head.appendChild(s)}
function expose(){I().openLegalPolicy=openPolicy;I().openPolicyR10F26=openPolicy;I().openAccountFileR10F26=openAccountPanel;I().closeTransientScreensR10F26=closeTransientScreens;I().singlePrimaryPageR10F26=singlePrimaryPage;I().exportAccountFileR10F26=exportAccountFile;I().openWhyIthakiR10F26=openWhy;I().openBilSettingsR10F26=openNotificationSettings;window.openPolicyR10F26=openPolicy;window.openWhyIthakiR10F26=openWhy}
function maintain(){css();expose();wrapPage();cleanProfileDuplicates();singlePrimaryPage();document.querySelectorAll('.proFooter').forEach(f=>f.textContent='OK-ITHAKI R10F37F1 · Ενιαία έκδοση · Εσωτερική γλώσσα');const bil=$('ith526BilDock')||$('ith525BilDock')||$('ithBilStableV249475');if(bil){bil.dataset.ithakiBil='settings-r10f26';bil.title=tr('ΒΙΛ — ρυθμίσεις ειδοποιήσεων','Bil — notification settings')}document.documentElement.dataset.ithakiR10f26='single-policy-exclusive-screens'}
function install(){css();expose();document.addEventListener('click',capture,true);observe();maintain();setInterval(maintain,1800);setTimeout(ensureCookieBanner,900);try{localStorage.setItem('ith_frontend_build','V249526R10F26-single-policy-exclusive-screens')}catch(_e){}}
if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',install,{once:true});else install();
})();
