const CATEGORIES = ['All','Food','Retail','Auto','Tech','Hotel'];
const AMOUNT_PRESETS = [5,10,15,25,50,100];
const PTS_PER_DOLLAR = 80;
const POINTS_PER_SHIFT = 150;

const REWARDS = [
{id:'chikfila',title:'Chik fil A',cat:'Food',bg:'#E4002B',initials:'CFA',pinned:412},
{id:'hm',title:'H & M',cat:'Retail',bg:'#DD3333',initials:'H&M',pinned:203},
{id:'adidas',title:'Adidas',cat:'Retail',bg:'#000000',initials:'AD',pinned:891},
{id:'walmart',title:'Walmart',cat:'Retail',bg:'#0071CE',initials:'W',pinned:1204},
{id:'target',title:'Target',cat:'Retail',bg:'#CC0000',initials:'T',pinned:987},
{id:'costco',title:'Costco',cat:'Retail',bg:'#005DAA',initials:'CO',pinned:415},
{id:'nike',title:'Nike',cat:'Retail',bg:'#000000',initials:'N',pinned:1102},
{id:'jiffylube',title:'Jiffy Lube',cat:'Auto',bg:'#7A1F2B',initials:'JL',pinned:76},
{id:'shell',title:'Shell',cat:'Auto',bg:'#FFD500',initials:'S',pinned:210},
{id:'autozone',title:'AutoZone',cat:'Auto',bg:'#D6001C',initials:'AZ',pinned:64},
{id:'cinnabon',title:'Cinnabon',cat:'Food',bg:'#1E2A78',initials:'CB',pinned:340},
{id:'starbucks',title:'Starbucks',cat:'Food',bg:'#00704A',initials:'SB',pinned:2130},
{id:'mcdonalds',title:"McDonald's",cat:'Food',bg:'#DA291C',initials:'M',pinned:1580},
{id:'chipotle',title:'Chipotle',cat:'Food',bg:'#A81612',initials:'C',pinned:702},
{id:'jerseymikes',title:"Jersey Mike's",cat:'Food',bg:'#003DA5',initials:'JM',pinned:188},
{id:'bestbuy',title:'Best Buy',cat:'Tech',bg:'#0A4CA0',initials:'BB',pinned:158},
{id:'apple',title:'Apple',cat:'Tech',bg:'#1d1d1f',initials:'A',pinned:1340},
{id:'gamestop',title:'GameStop',cat:'Tech',bg:'#C41230',initials:'GS',pinned:295},
{id:'hilton',title:'Hilton',cat:'Hotel',bg:'#00457C',initials:'HH',pinned:64},
{id:'marriott',title:'Marriott',cat:'Hotel',bg:'#7A1E30',initials:'MR',pinned:120},
{id:'airbnb',title:'Airbnb',cat:'Hotel',bg:'#FF5A5F',initials:'AB',pinned:308},
];

const BANNERS = [
{id:'b1',eyebrow:'This week',title:'Double points on every shift',sub:'Clock in Friday through Sunday and stack 2x points automatically.',cta:'See details',shape:'wave',tone:'primary',rewardIds:['starbucks','chikfila','cinnabon']},
{id:'b2',eyebrow:'New partner',title:'Cinnabon joins the rewards wall',sub:'Redeem points for a treat at 900+ locations nationwide.',cta:'View reward',shape:'blob',tone:'violet',rewardIds:['cinnabon','mcdonalds']},
{id:'b3',eyebrow:'Milestone',title:'10,000 brands, one wallet',sub:'Every shift you work gets you closer to what you actually want.',cta:'Explore rewards',shape:'grid',tone:'dark',rewardIds:['walmart','adidas','hm','bestbuy','hilton','jiffylube']},
];

const PRYZER_QUOTES = [
{name:'Amara T.',role:'Warehouse Associate',quote:'I redeemed my first gift card after two weeks of shifts. Felt like getting paid twice.'},
{name:'Devon K.',role:'Restaurant Staff',quote:'Pinning the ones I want keeps me motivated to pick up an extra shift.'},
{name:'Priya S.',role:'Retail Associate',quote:'Watching the ring fill up on payday rewards is oddly satisfying.'},
];

const GUIDE_STEPS = [
{step:1,title:'Pick your amount',body:'Choose a preset or enter a custom amount for the brand you want.'},
{step:2,title:'Confirm with points',body:'We show the exact point cost before you lock it in — no surprises.'},
{step:3,title:'Get your code instantly',body:'Your gift card code lands in your wallet and inbox right away.'},
];

const REDEMPTIONS = [
{id:'r1',rewardId:'starbucks',amount:15,date:'Jul 18',code:'SB-4K2P-9XQ1'},
{id:'r2',rewardId:'target',amount:25,date:'Jul 9',code:'TG-88LM-3RZ0'},
{id:'r3',rewardId:'chikfila',amount:10,date:'Jun 29',code:'CFA-201A-77JD'},
{id:'r4',rewardId:'nike',amount:50,date:'Jun 12',code:'NK-90ZQ-114C'},
];

const STATS_HISTORY = {
  week: { labels:['Mon','Tue','Wed','Thu','Fri','Sat','Sun'], points:[80,120,60,150,100,180,140], goals:[1,0,1,1,0,2,1] },
  month: { labels:Array.from({length:30},(_,i)=>String(i+1)), points:[60,90,150,40,120,80,170,110,60,140,190,70,100,160,130,50,180,90,120,200,80,110,150,60,170,130,90,140,110,160], goals:[1,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,1,2] },
  year: { labels:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'], points:[1800,2100,1950,2400,2600,2300,2900,3100,2800,3400,3200,3600], goals:[10,12,11,15,17,14,19,21,18,23,22,25] },
};
const STREAK_TRAIL = [1,2,3,4,5,6,7,8].map((n,i)=>({ day:n, active:i<6 }));
const STATS_EXTRA = { avgWeeklyHours:'9h 20m', rank:9, rankChange:2, encashedValue:145, prevWorkdayPoints:64, prevWorkdayChange:12 };

const COMPANIES = {
walmart:{name:'Walmart',bg:'#0071CE',initials:'W'},
starbucks:{name:'Starbucks',bg:'#00704A',initials:'S'},
target:{name:'Target',bg:'#CC0000',initials:'T'},
chipotle:{name:'Chipotle',bg:'#A81612',initials:'C'},
costco:{name:'Costco',bg:'#005DAA',initials:'C'},
mcdonalds:{name:"McDonald's",bg:'#DA291C',initials:'M'},
bestbuy:{name:'Best Buy',bg:'#0A4CA0',initials:'B'},
marriott:{name:'Marriott',bg:'#7A1E30',initials:'M'},
};

const STORE_NAMES = ['Store #1','Store #2','Store #3','Langston Blvd','Riverside Ave','Store #4','Cedar Grove','Store #5','Harbor Point','Store #6'];

const NOTIFICATIONS = [
{id:'n1',kind:'Points',icon:'sparkle',tone:'lime',title:'+150 points landed',body:'Yesterday’s closing shift cleared.',time:'2h',group:'Today',unread:true},
{id:'n2',kind:'Kudos',icon:'hands-clapping',tone:'violet',title:'Kayla B. sent you kudos',body:'Training the new hires so patiently.',time:'5h',group:'Today',unread:true},
{id:'n3',kind:'Leaderboard',icon:'trophy',tone:'orange',title:'You moved up 2 spots',body:'Now #9 at Store #1.',time:'9h',group:'Today',unread:true},
{id:'n4',kind:'Goals',icon:'crown-simple',tone:'lime',title:'Marcus added 3 goals',body:'Floor set drops Thursday.',time:'1d',group:'Earlier',unread:false},
{id:'n5',kind:'Rewards',icon:'gift',tone:'violet',title:'Cinnabon joined rewards',body:'Redeemable at 900+ locations.',time:'2d',group:'Earlier',unread:false},
{id:'n6',kind:'Streak',icon:'flame',tone:'orange',title:'Streak safe',body:'6 days and counting.',time:'3d',group:'Earlier',unread:false},
{id:'n7',kind:'Points',icon:'sparkle',tone:'lime',title:'+200 points landed',body:'Shift cover for Jesse P.',time:'5d',group:'Earlier',unread:false},
];

const TODAY_GOALS = [
{id:'g1',title:'Complete Opus Signup',short:'Opus signup',emoji:'✅',pts:48,cadence:'Once',cap:'',hot:true,src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:6,picked:19},
{id:'g2',title:'Sell a Large Beverage',short:'Sell a large',emoji:'🥤',pts:10,cadence:'Each sale',cap:'no cap',src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:1,picked:34},
{id:'g3',title:'Give kudos to a teammate',short:'Send kudos',emoji:'👏',pts:25,cadence:'Daily',cap:'up to 3×/day',src:'Pryze',co:'Pryze',scope:'Every Pryzer',mins:2,picked:31},
{id:'g4',title:"Sell an S'mores Item",short:"Sell an s'mores item",emoji:'🥐',pts:5,cadence:'Each sale',cap:'no cap',hot:true,src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:1,picked:41},
{id:'g5',title:'Pastry case faced before open',short:'Face the case',emoji:'🧁',pts:35,cadence:'Every shift',cap:'',src:'Manager',co:'Paris Baguette Corp',scope:'Store #1025',mins:15,picked:7},
];

const ALL_GOALS = [
{id:'a1',group:'Beverage',title:'Sell a Medium Beverage',short:'Sell a medium',emoji:'🥤',pts:10,cadence:'Each sale',cap:'no cap',src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:1,picked:28},
{id:'a2',group:'Beverage',title:'Sell a Large Beverage',short:'Sell a large',emoji:'🥤',pts:10,cadence:'Each sale',cap:'no cap',src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:1,picked:34},
{id:'a3',group:'Beverage',title:'Add an Extra Shot',short:'Add a shot',emoji:'☕',pts:5,cadence:'Each sale',cap:'no cap',src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:1,picked:22},
{id:'a4',group:'Beverage',title:'Hit the upsell button',short:'Hit upsell',emoji:'🔼',pts:5,cadence:'Each order',cap:'no cap',src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:1,picked:16},
{id:'a5',group:'Menu',title:"Sell an S'mores Item",short:"Sell an s'mores item",emoji:'🥐',pts:5,cadence:'Each sale',cap:'no cap',hot:true,src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:1,picked:41},
{id:'a6',group:'Menu',title:"S'mores Cruffin or Mochi Donut sale",short:"S'mores bakery sale",emoji:'🍩',pts:5,cadence:'Each sale',cap:'no cap',src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:1,picked:23},
{id:'a7',group:'Opus',title:'Complete Opus Signup',short:'Opus signup',emoji:'✅',pts:48,cadence:'Once',cap:'',hot:true,src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:6,picked:19},
{id:'a8',group:'Opus',title:'Increase Your Opus Completion Rate',short:'Raise Opus rate',emoji:'📈',pts:10,cadence:'Each increase',cap:'',src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:10,picked:13},
{id:'a9',group:'Opus',title:'100% Opus Assignment Completion',short:'Opus at 100%',emoji:'🚀',pts:25,cadence:'First time',cap:'',src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:20,picked:6},
{id:'a10',group:'Opus',title:'Increase Opus Team Score',short:'Lift team Opus',emoji:'🚀',pts:10,cadence:'Each milestone',cap:'',src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:5,picked:9},
{id:'a11',group:'Sales',title:'Week-over-week average ticket increase',short:'Grow avg ticket',emoji:'📊',pts:10,cadence:'Weekly',cap:'',src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:0,picked:11},
{id:'a12',group:'Sales',title:'Week-over-week sales total increase',short:'Grow weekly sales',emoji:'💵',pts:10,cadence:'Weekly',cap:'',src:'Company',co:'Paris Baguette Corp',scope:'All stores',mins:0,picked:10},
{id:'a13',group:'Store',title:'Pastry case faced before open',short:'Face the case',emoji:'🧁',pts:35,cadence:'Every shift',cap:'',src:'Manager',co:'Paris Baguette Corp',scope:'Store #1025',mins:15,picked:7},
{id:'a14',group:'Store',title:'Cafe reset before close',short:'Cafe reset',emoji:'🧹',pts:40,cadence:'Every shift',cap:'',src:'Manager',co:'Paris Baguette Corp',scope:'Store #1025',mins:20,picked:5},
{id:'a15',group:'Store',title:'Morning bake pulled on time',short:'Bake on time',emoji:'⏰',pts:45,cadence:'Every shift',cap:'',src:'Manager',co:'Paris Baguette Corp',scope:'Store #001C',mins:10,picked:4},
{id:'a16',group:'Team',title:'Give kudos to a teammate',short:'Send kudos',emoji:'👏',pts:25,cadence:'Daily',cap:'up to 3×/day',src:'Pryze',co:'Pryze',scope:'Every Pryzer',mins:2,picked:31},
{id:'a17',group:'Team',title:'Sign a guest up for the app',short:'Sign up a guest',emoji:'📱',pts:90,cadence:'Each signup',cap:'up to 6×/day',hot:true,src:'Pryze',co:'Pryze',scope:'Every Pryzer',mins:5,picked:27},
{id:'a18',group:'Training',title:'Complete register module 3',short:'Register module 3',emoji:'🎓',pts:95,cadence:'Once',cap:'',src:'Pryze',co:'Pryze',scope:'Every Pryzer',mins:15,picked:7},
];

const GOAL_SOURCES = ['Manager','Company','Pryze'];
const ACTION_PLAN = [
{step:'Finish your Opus signup today',pts:'48 pts once'},
{step:'Upsell a large on every third order',pts:'120 pts/shift'},
{step:'Kudos a teammate daily',pts:'75 pts/week'},
];

const MANAGER_NOTE = {name:'Marcus Delgado',role:'Store Manager',photo:'assets/lb-photo3.jpg',note:"S'mores launch runs all week — clear two goals before Thursday and I’ll sign off your boost."};

const USER = {name:'Jordan Reyes',bio:'Iced coffee before anything else ☕',points:1640,streak:6,role:'Retail Associate',kudos:284,goals:12,photo:'assets/lb-photo-self.jpg',company:'target',store:'Store #1'};

const LEADERBOARD_PEERS = [
{id:'p1',name:'Dennis Reynolds',points:3120,kudos:512,role:'Warehouse Associate',rankChange:0,streak:14,goals:31,isNewTop3:false,photo:'assets/lb-photo1.jpg',company:'costco',store:'Store #2'},
{id:'p2',name:'Hannah Baker',points:2840,kudos:470,role:'Retail Associate',rankChange:1,streak:9,goals:26,isNewTop3:false,photo:'assets/lb-photo2.jpg',company:'target',store:'Store #1'},
{id:'p3',name:'Walter White',points:2615,kudos:398,role:'Restaurant Staff',rankChange:-1,streak:3,goals:22,isNewTop3:false,photo:'assets/lb-photo3.jpg',company:'mcdonalds',store:'Langston Blvd'},
{id:'p4',name:'Mac McDonald',points:2390,kudos:355,role:'Warehouse Associate',rankChange:4,streak:21,goals:19,isNewTop3:true,photo:'assets/lb-photo4.jpg',company:'walmart',store:'Riverside Ave'},
{id:'p5',name:'Jesse Pinkman',points:2110,kudos:301,role:'Retail Associate',rankChange:-2,streak:0,goals:16,isNewTop3:false,photo:'assets/lb-photo5.jpg',company:'bestbuy',store:'Store #3'},
{id:'p6',name:'Clay Jensen',points:1920,kudos:276,role:'Restaurant Staff',rankChange:2,streak:5,goals:15,isNewTop3:false,photo:'assets/lb-photo6.jpg',company:'chipotle',store:'Cedar Grove'},
{id:'p7',name:'Charlie Kelly',points:1780,kudos:250,role:'Retail Associate',rankChange:0,streak:11,goals:13,isNewTop3:false,photo:'assets/lb-photo7.jpg',company:'target',store:'Store #1'},
{id:'p8',name:'Skyler White',points:1705,kudos:233,role:'Warehouse Associate',rankChange:-3,streak:2,goals:12,isNewTop3:false,photo:'assets/lb-photo8.jpg',company:'costco',store:'Store #2'},
{id:'p9',name:'Jessica Davis',points:1512,kudos:198,role:'Retail Associate',rankChange:1,streak:0,goals:10,isNewTop3:false,photo:'assets/lb-photo9.jpg',company:'starbucks',store:'Harbor Point'},
{id:'p10',name:'Sweet Dee Reynolds',points:1388,kudos:172,role:'Restaurant Staff',rankChange:3,streak:8,goals:9,isNewTop3:false,photo:'assets/lb-photo10.jpg',company:'marriott',store:'Store #4'},
{id:'p11',name:'Saul Goodman',points:1204,kudos:150,role:'Warehouse Associate',rankChange:-1,streak:0,goals:7,isNewTop3:false,photo:'assets/lb-photo11.jpg',company:'walmart',store:'Riverside Ave'},
{id:'p12',name:'Justin Foley',points:980,kudos:118,role:'Retail Associate',rankChange:2,streak:4,goals:6,isNewTop3:false,photo:'assets/lb-photo12.jpg',company:'starbucks',store:'Store #3'},
];

const FIRST_NAMES = ['Alex','Jordan','Taylor','Morgan','Casey','Riley','Jamie','Drew','Reese','Skyler','Quinn','Avery','Rowan','Emerson','Finley','Harper','Kendall','Peyton','Sage','Wren','Blake','Cameron','Dakota','Elliot','Hayden'];
const LAST_NAMES = ['Diaz','Nguyen','Brooks','Foster','Hayes','Bennett','Kim','Patel','Ross','Ward','Ellis','Owens','Sutton','Reyes','Hale','Carr','Dunn','Vance','Pratt','Cole','Ortiz','Fields','Lowe','Nash','Reed'];
function seededRand(seed){const x=Math.sin(seed)*10000;return x-Math.floor(x);}
const STOCK_PHOTOS = Array.from({length:12},(_,i)=>`assets/lb-photo${13+i}.jpg`);
function makeFillerPeers(count){
  const companyKeys=Object.keys(COMPANIES);
  const roles=['Retail Associate','Warehouse Associate','Restaurant Staff'];
  const arr=[];
  for(let i=0;i<count;i++){
    const fn=FIRST_NAMES[Math.floor(i/STORE_NAMES.length)%FIRST_NAMES.length], ln=LAST_NAMES[(i*7+3)%LAST_NAMES.length];
    const points=Math.max(40,Math.round(940-i*7.6+seededRand(i*13.37+1)*110));
    arr.push({id:`f${i}`,name:`${fn} ${ln}`,points,kudos:Math.round(points*0.16),role:roles[i%roles.length],rankChange:Math.round((seededRand(i*3.1)-0.5)*8),streak:Math.round(seededRand(i*5.2)*20),goals:Math.round(3+seededRand(i*7.7)*20),isNewTop3:false,photo:STOCK_PHOTOS[Math.floor(i/STORE_NAMES.length)%STOCK_PHOTOS.length],company:companyKeys[i%companyKeys.length],store:STORE_NAMES[i%STORE_NAMES.length]});
  }
  return arr;
}
const FILLER_PEERS = makeFillerPeers(110);
const LEADERBOARD_SCOPE_SIZES = {Store:30,Company:60,Universe:100};

const LEADERBOARD_SCOPES = ['Store','Company','Universe'];

const KUDOS_SHOUTOUTS = [
{from:'Priya S.',to:'Nina F.',msg:'covering my shift last-minute, huge save 🙏'},
{from:'Marcus D.',to:'Amara T.',msg:'crushing the morning rush solo today'},
{from:'Kayla B.',to:'Jordan Reyes',msg:'training the new hires so patiently'},
];

const ORBIT_BIOS = [
  'Iced coffee before anything else ☕','Here for the vibes and the paycheck','Weekend warrior, weekday grinder','Ask me about my dog 🐶','Trying to hit a new PR every shift','Team player, chaos coordinator','Currently saving for a trip ✈️','Manifesting employee of the month','Snack table curator','Music always on during closing shift',
];
function buildOrbitActiveUsers(){
  const pool = [...LEADERBOARD_PEERS, ...FILLER_PEERS].filter(p => p.store === USER.store);
  const sorted = [...pool].sort((a,b) => b.points - a.points);
  const ranked = sorted.map((p,i) => ({ ...p, rank: i + 1 }));
  const active = ranked.slice(0, 12);
  return active.map((p,i) => ({
    ...p,
    streak: p.streak || 1 + (i % 3),
    bio: ORBIT_BIOS[i % ORBIT_BIOS.length],
    lastReward: REWARDS[(p.name.length * 7 + i) % REWARDS.length],
    kudosLifetime: p.kudos,
  }));
}
const ORBIT_ACTIVE_USERS = buildOrbitActiveUsers();

function buildActivityLog(){
  const out=[];const today=new Date(2026,6,31);
  const acts=[['Curbside handoffs',60],['Endcap restock',80],['Kudos given',25],['On-time clock in',40],['Guest signup',90],['Shift cover',200],['Safety module',120]];
  const trivia=['Your fastest handoff day yet','You out-earned 74% of the crew','Best kudos day of the week','Three goals before lunch, unreal','Quietest shift, highest points','You closed the store solo','Longest session of the month','Two boosts stacked on this one'];
  for(let i=0;i<92;i++){
    const d=new Date(today);d.setDate(today.getDate()-i);
    const r=seededRand(i*4.7+2);
    const worked=r>0.24;
    const n=worked?1+Math.floor(seededRand(i*2.3)*3):0;
    const items=[];let pts=0;
    for(let k=0;k<n;k++){const a=acts[Math.floor(seededRand(i*3.1+k)*acts.length)];const c=1+Math.floor(seededRand(i*5.9+k)*3);items.push({label:a[0],count:c,pts:a[1]*c});pts+=a[1]*c;}
    const startH=worked?7+Math.floor(seededRand(i*8.3)*5):0;
    const dur=worked?4+Math.floor(seededRand(i*9.1)*5):0;
    const fmt=h=>((h%12)||12)+(h<12?' am':' pm');
    out.push({date:d.toISOString().slice(0,10),day:d.getDate(),month:d.getMonth(),year:d.getFullYear(),dow:d.getDay(),worked,pts,items,
      start:worked?fmt(startH):null,end:worked?fmt(startH+dur):null,hours:dur,
      kudosGiven:worked?Math.floor(seededRand(i*2.7)*4):0,
      kudosGot:worked?Math.floor(seededRand(i*6.4)*5):0,
      redeemed:seededRand(i*11.3)>0.88?[10,15,25][Math.floor(seededRand(i*12.1)*3)]*80:0,
      goalsDone:items.length,
      trivia:worked&&seededRand(i*14.9)>0.62?trivia[Math.floor(seededRand(i*15.7)*trivia.length)]:null});
  }
  // prototype shaping: make all four engagement states and the 21-day habit milestone visible
  out.forEach((d, i) => {
    const clear = () => Object.assign(d, { worked: false, pts: 0, items: [], start: null, end: null, hours: 0, kudosGiven: 0, kudosGot: 0, redeemed: 0, goalsDone: 0, trivia: null });
    if (i >= 30 && i <= 41) return clear();
    if (i >= 44 && i <= 55) {
      if (!d.worked) { d.worked = true; d.start = '10 am'; d.end = '2 pm'; }
      d.hours = 4;
      if (!d.items.length) { d.items = [{ label: 'Kudos given', count: 1, pts: 25 }]; }
      d.pts = d.items.reduce((s, x) => s + x.pts, 0);
      d.goalsDone = d.items.length;
      return;
    }
    if (i <= 24) {
      if (!d.worked) { d.worked = true; d.start = '9 am'; d.end = '4 pm'; d.kudosGiven = 1; d.kudosGot = 2; }
      d.hours = Math.max(d.hours, 6);
      if (!d.items.length) d.items = [{ label: 'Endcap restock', count: 2, pts: 160 }];
      d.pts = d.items.reduce((s, x) => s + x.pts, 0);
      d.goalsDone = d.items.length;
    }
  });
  return out.reverse();
}
const ACTIVITY_LOG = buildActivityLog();

window.PryzeData = { REWARDS, USER, CATEGORIES, AMOUNT_PRESETS, PTS_PER_DOLLAR, POINTS_PER_SHIFT, BANNERS, PRYZER_QUOTES, GUIDE_STEPS, LEADERBOARD_PEERS, FILLER_PEERS, LEADERBOARD_SCOPE_SIZES, LEADERBOARD_SCOPES, KUDOS_SHOUTOUTS, COMPANIES, REDEMPTIONS, STATS_HISTORY, STREAK_TRAIL, STATS_EXTRA, ORBIT_ACTIVE_USERS, NOTIFICATIONS, MANAGER_NOTE, TODAY_GOALS, ALL_GOALS, ACTIVITY_LOG, GOAL_SOURCES, ACTION_PLAN };
