// Shared tokens, icons and mock data for the Noo (Nextcloud client) mocks.
(function () {
// Icons: Lucide (lucide-static@0.460.0), inlined as mask data URIs.
const SVG = {"menu":"","search":"","plus":"","x":"","check":"","chevR":"","chevD":"","chevL":"","back":"","sort":"","up":"","filter":"","list":"","grid":"","folder":"","doc":"","sheet":"","film":"","image":"","zip":"","star":"","moreV":"","moreH":"","ok":"","sync":"","alert":"","photos":"","offline":"","share":"","clock":"","activity":"","trash":"","settings":"","restore":"","link":"","copy":"","userPlus":"","users":"","lock":"","fingerprint":"","face":"","calendar":"","send":"","grip":"","pin":"","pinOff":"","info":"","logout":"","server":"","wifi":"","signal":"","battery":"","charging":"","camera":"","database":"","palette":"","swipe":"","upload":"","play":"","pencil":"","timer":"","minus":"","square":"","panel":"","download":"","hidden":"","eye":"","external":"","key":"","monitor":"","plusCircle":""};
const ic = (n, s, c = 'currentColor') => { const u = `url("data:image/svg+xml,${encodeURIComponent(SVG[n])}") center/contain no-repeat`; return { width: s, height: s, flex: 'none', display: 'block', background: c, WebkitMask: u, mask: u }; };
const set = s => Object.fromEntries(Object.keys(SVG).map(k => [k, ic(k, s)]));
const I = { 14: set(14), 16: set(16), 18: set(18), 20: set(20), 24: set(24), 32: set(32) };
const FT = "'Instrument Sans', system-ui, sans-serif", FD = "'Schibsted Grotesk', system-ui, sans-serif";
const TH = {
light: {'--bg':'#F3EFE6','--sf':'#FFFFFF','--sf2':'#F6F5F2','--sf3':'#EAE8E2','--ln':'#EAE8E2','--fg1':'#0E0D0B','--fg2':'#5A5852','--fg3':'#7C7A72','--ac':'#8D0DE3','--act':'#8D0DE3','--acs':'#ECDFFF','--dg':'#A8202A','--dgs':'#FDE7E7','--dgf':'#A8202A','--ok':'#3E7A23','--oks':'#EAF5DF','--wn':'#8C5A0E','--wns':'#FBEFD0','--in':'#2940A8','--ins':'#E6ECFE','--scrim':'rgba(14,13,11,0.45)','--ft':FT,'--fd':FD},
dark: {'--bg':'#0E0D0B','--sf':'#25241F','--sf2':'#3D3C38','--sf3':'#5A5852','--ln':'#3D3C38','--fg1':'#F3EFE6','--fg2':'#BDBAB1','--fg3':'#9E9B92','--ac':'#8D0DE3','--act':'#CBA5FD','--acs':'#2F0454','--dg':'#F49E9E','--dgs':'#560F18','--dgf':'#A8202A','--ok':'#B7DD9F','--oks':'#1E3F10','--wn':'#F0C26C','--wns':'#4A3208','--in':'#B6C3FB','--ins':'#1C2B73','--scrim':'rgba(0,0,0,0.6)','--ft':FT,'--fd':FD}
};
const KIND = {folder:['--acs','--act','folder'],pdf:['--dgs','--dg','doc'],doc:['--ins','--in','doc'],sheet:['--oks','--ok','sheet'],video:['--wns','--wn','film'],image:['--ins','--in','image'],zip:['--sf3','--fg2','zip']};
const tile = (k, s, r, bg) => ({ width: s, height: s, borderRadius: r, flex: 'none', display: 'flex', alignItems: 'center', justifyContent: 'center', background: `var(${KIND[k][0]})`, color: `var(${KIND[k][1]})` });
const BADGE = { ok: ic('ok', 14, 'var(--ok)'), sync: ic('sync', 14, 'var(--act)'), err: ic('alert', 14, 'var(--dg)') };
const F = (name, kind, size, mod, o = {}) => ({ name, kind, size, mod, ...o });
const D = {
files: [F('Documents','folder','24 items','Sep 20'),F('Photos','folder','1,204 items','Today'),F('Projects','folder','8 items','Sep 19',{shared:1}),F('Q3 Planning.pdf','pdf','2.4 MB','Yesterday',{fav:1,off:'ok'}),F('Budget 2026.xlsx','sheet','186 KB','Sep 18',{shared:1,swiped:1}),F('Offsite recap.mp4','video','412 MB','Sep 12',{off:'ok'}),F('Brand brief.docx','doc','58 KB','Sep 10'),F('Whiteboard.jpg','image','3.1 MB','Sep 9'),F('Invoices 2026.zip','zip','24 MB','Sep 2'),F('Lease 2026.pdf','pdf','880 KB','Aug 28')],
favorites: [F('Q3 Planning.pdf','pdf','2.4 MB','Yesterday',{off:'ok'}),F('Projects','folder','8 items','Sep 19',{shared:1}),F('Passport scan.pdf','pdf','1.1 MB','Aug 30',{off:'ok'}),F('Family budget.xlsx','sheet','92 KB','Aug 21',{shared:1}),F('Wedding','folder','312 items','Jun 14'),F('Tax return 2025.pdf','pdf','640 KB','Apr 2')],
offline: [F('Q3 Planning.pdf','pdf','2.4 MB','',{off:'ok',meta:'Up to date · 2.4 MB'}),F('Offsite recap.mp4','video','412 MB','',{off:'ok',meta:'Up to date · 412 MB'}),F('Contracts','folder','18 items','',{off:'sync',meta:'Syncing 12 of 18 files'}),F('Passport scan.pdf','pdf','1.1 MB','',{off:'ok',meta:'Up to date · 1.1 MB'}),F('Budget 2026.xlsx','sheet','186 KB','',{off:'err',meta:'Couldn\u2019t sync · Tap to retry'}),F('Recipes','folder','42 items','',{off:'ok',meta:'Up to date · 64 MB'})],
shares: [F('Projects','folder','8 items','Sep 19',{meta:'Ana Souza · Can edit',by:'Ana Souza',perm:'Can edit'}),F('Offsite photos','folder','96 items','Sep 12',{meta:'Leo Park · Can view',by:'Leo Park',perm:'Can view'}),F('Q3 Planning.pdf','pdf','2.4 MB','Yesterday',{meta:'Ana Souza · Can edit',by:'Ana Souza',perm:'Can edit'}),F('Recipes.docx','doc','44 KB','Aug 3',{meta:'Helena Rocha · Can view',by:'Helena Rocha',perm:'Can view'}),F('Lease 2026.pdf','pdf','880 KB','Aug 28',{meta:'Leo Park · Can view',by:'Leo Park',perm:'Can view'}),F('Design team','folder','212 items','Jul 30',{meta:'Design team · Can edit',by:'Design team',perm:'Can edit'})],
recent: [{label:'Today',rows:[F('Q3 Planning.pdf','pdf','2.4 MB','10:24',{meta:'Edited 10:24 · Documents',fav:1}),F('Whiteboard.jpg','image','3.1 MB','9:40',{meta:'Uploaded 9:40 · Photos'}),F('Brand brief.docx','doc','58 KB','8:12',{meta:'Opened 8:12 · Projects'})]},{label:'Yesterday',rows:[F('Budget 2026.xlsx','sheet','186 KB','',{meta:'Edited by Leo Park · Projects',shared:1}),F('Offsite recap.mp4','video','412 MB','',{meta:'Opened · Offsite photos',off:'ok'})]},{label:'This week',rows:[F('Invoices 2026.zip','zip','24 MB','',{meta:'Downloaded Mon · Documents'}),F('Lease 2026.pdf','pdf','880 KB','',{meta:'Opened Mon · Shared with you'})]}],
trash: [F('Old notes.txt','doc','4 KB','',{meta:'Deleted today · /Documents',from:'/Documents',del:'Today'}),F('Draft v1.docx','doc','62 KB','',{meta:'Deleted yesterday · /Projects',from:'/Projects',del:'Yesterday'}),F('Screenshots','folder','48 items','',{meta:'Deleted Sep 18 · /Photos',from:'/Photos',del:'Sep 18'}),F('IMG_2231.jpg','image','2.8 MB','',{meta:'Deleted Sep 15 · /Photos/Camera',from:'/Photos/Camera',del:'Sep 15'}),F('Budget 2025.xlsx','sheet','170 KB','',{meta:'Deleted Sep 2 · /Documents',from:'/Documents',del:'Sep 2'}),F('Moodboard.zip','zip','88 MB','',{meta:'Deleted Aug 29 · /Projects',from:'/Projects',del:'Aug 29'})],
activity: [{label:'Today',items:[{who:'AS',col:'#DA9AC7',name:'Ana Souza',verb:'shared',obj:'Q3 Planning.pdf',tail:'with you',time:'10:24',kind:'pdf'},{who:'LP',col:'#8DCDE2',name:'Leo Park',verb:'edited',obj:'Budget 2026.xlsx',tail:'',time:'9:02',kind:'sheet'},{who:'MR',col:'#CBA5FD',name:'You',verb:'uploaded',obj:'38 photos',tail:'to Photos/Camera',time:'8:15',kind:'image'}]},{label:'Yesterday',items:[{who:'AS',col:'#DA9AC7',name:'Ana Souza',verb:'commented on',obj:'Brand brief.docx',tail:'',time:'18:47',kind:'doc'},{who:'LP',col:'#8DCDE2',name:'Leo Park',verb:'created a link to',obj:'Offsite photos',tail:'',time:'15:10',kind:'folder'},{who:'MR',col:'#CBA5FD',name:'You',verb:'deleted',obj:'Old notes.txt',tail:'',time:'11:32',kind:'doc'}]}],
pinned: [['Files','folder','files'],['Photos','photos','photos'],['Favorites','star','favorites'],['Offline','offline','offline'],['Shares','share','shares']],
menu: [['Recent','clock','recent',''],['Activity','activity','activity',''],['Trash','trash','trash','12']],
titles: {files:'Files',photos:'Photos',activity:'Activity',trash:'Trash',favorites:'Favorites',offline:'Offline',shares:'Shares',recent:'Recent',settings:'Settings'},
palette: ['#8DCDE2','#96B0FD','#E5D8BD','#EEEDB3','#DA9AC7','#A7D296','#E9A6A7','#85D1BD','#CBA5FD']
};
function row(f, o = {}) {
const k = KIND[f.kind];
return { ...f, meta: f.meta || `${f.size} · ${f.mod}`, tile: tile(f.kind, o.tile || 40, o.r || 12), ico: I[o.ico || 20][k[2]],
hasBadge: !!f.off, badge: BADGE[f.off] || null, shared: !!f.shared, fav: !!f.fav && !o.noFav, swiped: !!f.swiped && !o.noSwipe,
thumb: { height: o.thumbH || 104, display: 'flex', alignItems: 'center', justifyContent: 'center', background: `var(${k[0]})`, color: `var(${k[1]})` }, icoL: I[32][k[2]] };
}
const tiles = (n, off, vids) => Array.from({ length: n }, (_, i) => ({ s: { aspectRatio: '1 / 1', background: D.palette[(i * 5 + off) % D.palette.length], position: 'relative' }, vid: vids.includes(i), dur: ['0:42', '1:08', '2:15'][i % 3] }));
const avatar = (col, s) => ({ width: s, height: s, borderRadius: 999, flex: 'none', background: col, color: '#0E0D0B', display: 'flex', alignItems: 'center', justifyContent: 'center', font: `600 ${Math.round(s * 0.36)}px/1 ${FT}` });
window.NK = { ic, I, TH, KIND, tile, row, tiles, avatar, D };
})();